如何在python wheel中打包perl文件

时间:2019-02-04 06:16:13

标签: python perl setuptools distutils python-wheel

我们为一个包含了python和perl脚本集合的软件包创建了一个pip wheel文件。由于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 :(得分:0)

如果您当前在项目{{1}中使用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调用添加package_data={'': ['*']},参数也应该使其与setup的最新版本一起使用。

更多附录:setuptools软件包实际上包含一个MANIFEST.in,其中包含此特定语法,尽管限于它们要包含的文件的特定文件名扩展名。尽管某些指南/文档可能会另外建议,但这显然是受支持的选项。实际上,默认情况下,这是Python附带的功能provided by the core distutils module。相关问题: