如何控制轮子中包含哪些文件?它似乎MANIFEST.in
不被python setup.py bdist_wheel
.
更新:
我对从源代码压缩包和轮子安装之间的区别是错误的。源代码分发包含 中指定的文件MANIFEST.in
,但安装的包只有 python 文件。需要采取步骤来识别应安装的其他文件,无论安装是通过源代码分发、egg 还是 wheel。也就是说,额外的包文件需要package_data ,而包外的文件(如命令行脚本或系统配置文件)需要data_files。
原始问题
我有一个项目,我一直在用python setup.py sdist
它来构建我的包,MANIFEST.in
控制包含和排除的文件,以及pyroma和check-manifest来确认我的设置。
我最近将它转换为双 Python 2 / 3 代码,并添加了一个 setup.cfg
[bdist_wheel]
universal = 1
我可以用 构建一个轮子python setup.py bdist_wheel
,它似乎是一个万能轮子。但是,它不包括MANIFEST.in
.
安装什么?
我挖得更深了,现在对包装和轮子有了更多的了解。这是我学到的:
我将两个包文件上传到PyPi 上的 multigtfs 项目:
multigtfs-0.4.2.tar.gz
- 源 tar 球,其中包括MANIFEST.in
.multigtfs-0.4.2-py2.py3-none-any.whl
- 有问题的二进制分布。
我创建了两个新的虚拟环境,都使用 Python 2.7.5,并安装了每个包 ( pip install multigtfs-0.4.2.tar.gz
)。这两个环境几乎相同。它们有不同.pyc
的文件,即“编译”的 Python 文件。有日志文件记录磁盘上的不同路径。从源 tar 球安装包括一个文件夹multigtfs-0.4.2-py27.egg-info
,详细说明安装,而轮子安装有一个multigtfs-0.4.2.dist-info
文件夹,其中包含该过程的详细信息。但是从使用multigtfs项目的代码来看,两种安装方式并没有什么区别。
明确地说,我的测试也没有使用 .zip 文件,因此测试套件将失败:
$ django-admin startproject demo
$ cd demo
$ pip install psycopg2 # DB driver for PostGIS project
$ createdb demo # Create PostgreSQL database
$ psql -d demo -c "CREATE EXTENSION postgis" # Make it a PostGIS database
$ vi demo/settings.py # Add multigtfs to INSTALLED_APPS,
# Update DATABASE to set ENGINE to django.contrib.gis.db.backends.postgis
# Update DATABASE to set NAME to test
$ ./manage.py test multigtfs.tests # Run the tests
...
IOError: [Errno 2] No such file or directory: u'/Users/john/.virtualenvs/test/lib/python2.7/site-packages/multigtfs/tests/fixtures/test3.zip'
指定附加文件
使用答案中的建议,我添加了一些额外的指令setup.py
:
from __future__ import unicode_literals
# setup.py now requires some funky binary strings
...
setup(
name='multigtfs',
packages=find_packages(),
package_data={b'multigtfs': ['test/fixtures/*.zip']},
include_package_data=True,
...
)
这会将 zip 文件(以及 README)安装到文件夹中,并且测试现在可以正常运行。感谢您的建议!