如何控制转盘中包含哪些文件?似乎MANIFEST.in没有被使用python setup.py bdist_wheel。
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 setup.py sdist
我最近将其转换为双重Python 2/3代码,并添加了setup.cfg
[bdist_wheel] universal = 1
我可以用构建轮子python setup.py bdist_wheel,并且根据需要它似乎是通用轮子。但是,它不包括中指定的所有文件MANIFEST.in。
我进行了更深入的研究,现在对包装和车轮有了更多的了解。这是我学到的:
我将两个包文件上传到PyPi的multigtfs项目中:
multigtfs-0.4.2.tar.gz
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项目的代码角度来看,两种安装方法之间没有区别。
pip install multigtfs-0.4.2.tar.gz
.pyc
multigtfs-0.4.2-py27.egg- info
multigtfs-0.4.2.dist- info
明确地说,我的测试都没有使用.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:
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文件(以及自述文件)安装到该文件夹中,并且测试现在可以正确运行。感谢您的建议!
你有没有尝试使用package_data在你的setup.py?MANIFEST.in似乎是针对python版本<= 2.6的,我不确定是否还会使用更高版本。
package_data
在浏览https://github.com/pypa/sampleproject之后,他们MANIFEST.in说:
# If using Python 2.6 or less, then have to include package data, even though # it's already declared in setup.py include sample/*.dat
这似乎暗示此方法已过时。同时,setup.py他们在声明中:
setup( name='sample', ... # If there are data files included in your packages that need to be # installed, specify them here. If using Python 2.6 or less, then these # have to be included in MANIFEST.in as well. package_data={ 'sample': ['package_data.dat'], }, ... )
(我不确定他们为什么选择其中的通配符MANIFEST.in和中的文件名setup.py。它们引用相同的文件)
再简单一点,这似乎又暗示该package_data路线优于该MANIFEST.in方法。好吧,除非您必须支持2.6,在这种情况下,我的祈祷会向您发出。