Python setup.py — как включить общую библиотеку

#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. Кроме того, мы используем бессерверный.