#python #python-3.x #setuptools #python-packaging #boilerplate
#python #python-3.x #setuptools #python-упаковка #шаблон
Вопрос:
Новичок в упаковке Python (но не Python), поэтому, пожалуйста, извините, если вопросы повсюду.
Пытаюсь упаковать модуль python ( project-A ), который использует набор общих сценариев из другого каталога ( lib).
Натыкаясь на стену о том, как включить этот каталог lib в конечный артефакт пакета.
The setup.py ниже показана рабочая структура каталогов и то, как я планирую окончательную структуру установки пакета.
Еще несколько вопросов —
- Относительное расположение библиотеки меняется между моим рабочим каталогом и установленным пакетом. Есть ли способ импортировать в обоих случаях без изменения кода?
- Эта структура лучше или я должен переместить все, что связано с Project_A , в его собственный каталог, таким образом, у каждого проекта будет свой собственный setup.py , МАНИФЕСТ, каталог conf и т. Д. (расположение библиотеки останется прежним, не уверен, что у каждого пакета должен быть свой собственный каталог тестов)
- сбой release=subprocess.check_output, если кто-то запускает это вне репозитория git. Есть ли способ добавить значение по умолчанию в таких случаях?
- В примере, с которым я столкнулся, была перемещена библиотека
/usr/lib/python3.4/site-packages/project_A/_lib
. Понравился этот подход. есть идеи, как добиться этого в setup.py
setup.py (в настоящее время создается два пакета)
setup(
name='project_A',
version='0.15',
# release is not supported in bdist rpm
#release=subprocess.check_output(["git", "rev-list", "--count", "--first-parent", "HEAD"]).rstrip(),
# if creating outside git
release="0.0.1",
author='foo',
author_email='hello@world.com',
url='http://www.hello.com',
long_description="README.txt",
#install_requires=['bottle','requests','supervisor'], # currently not working
#dependency_links = ['https://pypi.python.org/packages/source/b/bottle/bottle-0.12.8.tar.gz'],
packages=['project_A'],
include_package_data=True,
package_data={'images' : ['hello.gif']},
data_files=[
#('/etc/init.d/', ['project_Actl']), # some startup script
('/var/log/project_A',[]),
('/etc/project_A/conf/',['conf/project_A.conf'])
],
description="Hello World testing setuptools",
tests_require=['pytest'],
cmdclass = {
'test': PyTest,
'clean': CleanCommand
}
)
Проект-каталог установки —
/usr/lib/python3.4/site-packages/project_A
|
|____project_A/
| |
| |____project_A.py
|
|____lib
| |
| |______init__.py
| |____parseArguments.py
| |____setupLogger.py
| |____cleanup.py
Каталог рабочей области Python —
.
|____setup.py
|
|____MANIFEST.in
|
|____README.md
|
|____project_A/
| |
| |____project_A.py
|
|____project_B/
| |
| |____project_B.py
|
|____conf/
| |
| |____project_A.conf
| |____project_B.conf
|
|____lib
| |
| |______init__.py
| |____parseArguments.py
| |____setupLogger.py
| |____cleanup.py
|
|
|____images/
| |____hello.gif
|
|____tests
| |
| |____project_A
| | |____test_B_example.py
|
| |____project_B
| | |____test_A_example.py
Комментарии:
1. Спасибо за публикацию этого вопроса. Мы столкнулись с аналогичной проблемой. Мы хотим использовать общую библиотеку без создания пакета. В maven мы можем создать uber jar, и все будет обработано им. Он будет упаковывать общий код из подпакета maven, нам не нужно беспокоиться об этом. Не уверен, как сделать то же самое в Python. Кроме того, мы используем бессерверный.