问题:python项目需要MANIFEST.in吗,应该在其中吗?
“ Python分发”指南(位于python-distribute.org,但注册已失败)告诉我包括doc/txt
文件,并且.py
文件中排除了MANIFEST.in
文件
该sourcedist文档告诉我只有sdist用途MANIFEST.in
,并只包括文件指定和包含.py
文件。它还告诉我使用:python setup.py sdist --manifest-only
生成一个MANIFEST
,但是python告诉我这不存在
我很欣赏它们来自不同版本的python,并且分发系统完全混乱,但是假设我使用的是python 3,并且setuptools
(新的包括distribution,但现在称为setuptools,而不是不赞成仅用于分发工具的旧setuptools重新分配到发行版,并将发行版重命名为setuptools …..)
我遵循的是“标准”文件夹结构和setup.py
文件,
- 我需要一个
MANIFEST.in
吗? - 应该是什么?
- 所有这些不同的包装系统和方法何时才能形成一个简单的过程?
回答 0
回复:“我需要一个MANIFEST.in吗?
不,您不必使用MANIFEST.in
。两者,distutils
并且setuptools
被包括在源分发包中提到的所有文件setup.py
-的模块,包Python文件,
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
并检查在下创建的tarball dist/
。
这些不同的包装系统何时会…
比较今天和2年前的情况-情况要好得多- setuptools
是要走的路。您可以忽略一个事实,distutils
它有点破损,并且是低级别的基础,setuptools
因此setuptools
请注意对您隐藏这些东西。
编辑:我使用的最后几个项目pbr
用于构建分发包,其中三行setup.py
,其余部分在setup.cfg
和中requirements.txt
。无需关心MANIFEST.in
和其他奇怪的东西。即使该软件包值得更多文档。参见http://docs.openstack.org/developer/pbr/
回答 1
旧问题,新答案:
不,您不需要MANIFEST.in
。但是,要setuptools
执行您(通常)的意思,您确实需要使用setuptools_scm
,它MANIFEST.in
在2个关键位置扮演角色:
- 它确保在运行
sdist
命令时打包所有相关文件(其中所有相关文件都定义为“源代码控制下的所有文件”) - 当
include_package_data
用于将包数据包括为build
或的一部分时bdist_wheel
。(再次:在源代码控制下的文件)
历史上的理解MANIFEST.in
是:当您没有源代码控制系统时,您需要其他机制来区分“源文件”和“碰巧在您的工作目录中的文件”。但是,您的项目处于源代码控制之下(正确吗?),因此不需要MANIFEST.in
。本文中的更多信息。