“Python Distribute”指南(位于python-distribute.org,但注册已失效)告诉我包含doc/txt
个文件,.py
文件中不包含MANIFEST.in
个文件
sourcedist documentation告诉我只有sdist使用MANIFEST.in
并且只包含您指定的文件并包含.py
个文件。它还告诉我使用:python setup.py sdist --manifest-only
生成MANIFEST
,但python告诉我这不存在
我很欣赏这些来自不同版本的python并且分发系统是在
完全混乱,但假设我使用python 3和setuptools
(新的包括分发但现在称为setuptools,而不是旧的setuptools,已被弃用的分发工具只能被重新分配并分发重命名为setuptools .....)
我正在关注'标准'文件夹结构和setup.py
文件,
MANIFEST.in
吗?答案 0 :(得分:87)
不,您不必使用MANIFEST.in
。 distutils
和setuptools
都包含在源代码中
分发包setup.py
中提到的所有文件 - modules,package python files,
README.txt
和test/test*.py
。如果您希望在分发包中拥有这一切,那么您就可以
不必使用MANIFEST.in
。
如果您想操作(添加或删除)要包含的默认文件,则必须使用MANIFEST.in
。
程序很简单:
确保在setup.py
中包含(通过setup
个参数)您认为对程序运行重要的所有文件(模块,包,脚本......)
澄清,是否有要添加的文件或要排除的文件。如果两者都不需要,则无需使用MANIFEST.in
。
如果需要MANIFEST.in
,请创建它。通常,如果您不使用tests*/*.py
,README.rst
文件以及可能的测试套件数据文件,则会添加README.txt
个文件docs
。
例如:
include README.rst
include COPYING.txt
要测试它,请运行python setup.py sdist
,然后检查在dist/
下创建的tarball。
比较今天和2年前的情况 - 情况要好得多 - setuptools
是要走的路。你可以忽略这样一个事实,distutils
有点破碎,并且是setuptools
的低级基础,因为setuptools
会照顾你隐藏这些东西。
编辑:我使用pbr
的最后几个项目用于构建包含三行setup.py
的分发包,其余项目位于setup.cfg
和requirements.txt
。无需关心MANIFEST.in
和其他奇怪的东西。即使该软件包需要更多文档。见http://docs.openstack.org/developer/pbr/
答案 1 :(得分:2)
旧问题,新答案:
否,您不需要MANIFEST.in
。但是,要使setuptools
达到您通常的意思,您确实需要使用setuptools_scm
,它在两个关键位置都扮演MANIFEST.in
的角色:
sdist
命令时将所有相关文件打包(其中所有相关文件都定义为“在源代码管理下的所有文件”)include_package_data
将数据包数据作为build
或bdist_wheel
的一部分时。 (再次:在源代码管理下的文件)对MANIFEST.in
的历史理解是:当您没有源代码控制系统时,您需要一些其他机制来区分“源文件”和“碰巧在您的工作目录中的文件”。但是,您的项目处于源代码控制之下(正确吗?),因此不需要MANIFEST.in
。 More info in this article。