如何控制车轮中包含哪些文件?似乎MANIFEST.in
没有被使用python setup.py bdist_wheel
。
更新:
我错了从源tarball安装与安装轮子之间的区别。源代码发行版包含中指定的文件MANIFEST.in
,但已安装的软件包仅包含python文件。无论是通过源分发版,egg还是wheel安装,都需要采取步骤来确定应安装的其他文件。即,附加软件包文件需要package_data,而软件包外部文件(例如命令行脚本或系统配置文件)需要data_files。
原始问题
我有一个项目,我一直在使用python setup.py sdist
来构建我的包,MANIFEST.in
以控制包括和排除的文件,并pyroma和退房清单,以确认我的设置。
我最近将其转换为双重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文件(以及自述文件)安装到该文件夹中,并且测试现在可以正确运行。感谢您的建议!