许多人抱怨setuptools
在制作package_data
时没有包括sdist
中提到的内容。 (请参阅here和here和here。)但是,似乎在某些时候已经更改,因此package_data
中提到的项目不仅包含在{{ 1}} s,但也有bdist_wheel
s。我的问题是我想要旧的行为。我希望将文件(即编译的可执行文件)包含在sdist
中,而不包含在bdist_wheel
中。我现在该怎么办?
答案 0 :(得分:2)
尽管从技术上讲是可能的,但是请注意,当源dist不包含文件和wheel时,您最终将为相同的元数据安装不同的同一软件包,这是一个不良行为。在下面的示例中,
$ pip install spam --only-binary=spam # force installation from wheel
将安装file.txt
:
$ pip show -f spam | grep file.txt
spam/file.txt
同时
$ pip install spam --no-binary=spam # force installation from source dist
不会。这是引入新错误的确定来源,没有用户会感谢您的决定。
如果您确实确定这是您所需要的:您可以排除MANIFEST.in
中的文件。示例:
project
├── spam
│ ├── __init__.py
│ └── file.txt
├── MANIFEST.in
└── setup.py
MANIFEST.in
exclude spam/file.txt
setup.py
from setuptools import setup
setup(
name='spam',
version='0.1',
packages=['spam'],
package_data={'spam': ['file.txt']},
)
飞轮:
$ python setup.py bdist_wheel >/dev/null 2>&1 && unzip -l dist/spam-*.whl | grep file.txt
0 04-17-2019 21:25 spam/file.txt
构建源dist:
$ python setup.py sdist --formats=zip >/dev/null 2>&1 && unzip -l dist/spam-*.zip | grep file.txt
<empty>