Как упаковать perl-файлы в python wheel - PullRequest
0 голосов
/ 04 февраля 2019

Мы создали файл колеса pip для пакета, который содержит коллекцию скриптов на python и perl.Поскольку упаковка Python будет добавлять только файлы Python в файл wheel, это лучший способ также упаковать файлы Perl.

Это структура моего проекта

.
|____myproject
| |____logging.ini
| |____utils.py
| |____myperlscript.pl
| |____config.py
| |____version.py
| |____scripta.py
| |____scriptb.py
| |____scriptc.py
| |______init__.py
|____test
| |____test_scripts.py
|______init__.py
|____MANIFEST.in
|____README.md
|____setup.py
|____.gitignore
|____Jenkinsfile

1 Ответ

0 голосов
/ 04 февраля 2019

Если вы в настоящее время используете setuptools в setup.py для своего проекта и используете python setup.py bdist_wheel в качестве метода для создания файла .whl, добавьте следующую строку в файл MANIFEST.in, которыйуже присутствует в корне вашего проекта.

recursive-include myproject *

Естественно, замените myproject на фактический каталог верхнего уровня, который будет включать целевые сценарии .pl (или любой другой файл).

В качестве демонстрации, если ваша setup.py написана примерно так:

from setuptools import setup
from setuptools import find_packages

setup(
    name='myproject',
    version='0.0.0',
    description='demo package',
    long_description=open('README.md').read(),
    classifiers=[
        'Programming Language :: Python',
    ],
    packages=find_packages(),
    include_package_data=True,
    zip_safe=False,
)

Запуск python setup.py bdist_wheel покажет вывод, который выглядит следующим образом:

...
adding 'myproject/__init__.py'
adding 'myproject/config.py'
adding 'myproject/logging.ini'
adding 'myproject/myperlscript.pl'
adding 'myproject/scripta.py'
adding 'myproject/utils.py'
adding 'myproject/version.py'
adding 'test/__init__.py'
...

Файлы упакованывнутри .whl:

$ unzip -t dist/myproject-0.0.0-py3-none-any.whl 
Archive:  dist/myproject-0.0.0-py3-none-any.whl
    testing: myproject/__init__.py    OK
    testing: myproject/config.py      OK
    testing: myproject/logging.ini    OK
    testing: myproject/myperlscript.pl   OK
...

Установка получившегося файла .whl в новой среде:

$ pip install -U myproject-0.0.0-py3-none-any.whl 
Processing myproject-0.0.0-py3-none-any.whl
Installing collected packages: myproject
Successfully installed myproject-0.0.0
$ ls env/lib/python3.6/site-packages/myproject/
config.py    logging.ini      __pycache__  utils.py
__init__.py  myperlscript.pl  scripta.py   version.py

Также обратите внимание, что если метод MANIFEST.in нежелателен, включите *Аргумент 1030 * для вызова setup также должен заставить его работать с последними версиями setuptools.

Дальнейшее дополнение: пакет setuptools на самом деле имеет MANIFEST.in, которыйвключить этот конкретный синтаксис, хотя ограничен конкретным именем файлаns для файлов, которые они хотят включить.Это явно поддерживаемый вариант, несмотря на некоторые руководства / документацию, которые могут предложить иное.Фактически, это функция , предоставляемая базовым distutils модулем , которая поставляется с Python по умолчанию.Вопросы по теме:

...