如果您当前在项目的setup.py 中使用setuptools,并使用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 方法,则在 setup 调用中包含 package_data={'': ['*']}, 参数也应该使其适用于最新版本的 setuptools。
进一步的附录:setuptools 包实际上有一个 MANIFEST.in 包含此特定语法,但仅限于他们想要包含的文件的特定文件扩展名。尽管有一些指南/文档可能会提出其他建议,但这显然是一个受支持的选项。实际上,这是 Python 默认附带的功能provided by the core distutils module。相关问题: