Python 项目需要 MANIFEST.in 吗? 它应该包含哪些内容?

“ Python 发行版”指南( Python-Distribute.org ,但注册已经失效)告诉我要包含 doc/txt文件,而 .py文件被排除在 MANIFEST.in文件之外

来源文档告诉我 sdist 只使用 MANIFEST.in,并且只包含您指定的文件和包含 .py文件。它还告诉我使用: python setup.py sdist --manifest-only来生成 MANIFEST,但 python 告诉我这不存在

我很欣赏这些来自不同版本的 python,并且发行系统位于 但是假设我使用的是 python 3和 setuptools(新的那个包含 distribution 但现在称为 setuptools 的 setuptools,而不是旧的 setuptools,旧的 setuptools 曾经因为分发工具而被弃用,后来被重新分发并重命名为 setuptools... ...)

我遵循“标准”文件夹结构和 setup.py文件,

  1. 我需要 MANIFEST.in吗?
  2. 里面应该有什么?
  3. 何时将所有这些不同的包系统和方法制成一个单一的简单过程?
77722 次浏览

回复: “我需要一份清单吗?

不,你不必使用 MANIFEST.indistutilssetuptools都包含在源代码中 分发包中提到的所有文件 setup.py-模块,包 python 文件, README.txttest/test*.py。如果这是所有你想在发行包,你做 不必使用 MANIFEST.in

如果要操作(添加或删除)包含的默认文件,则必须使用 MANIFEST.in

回复: 里面应该有什么?

程序很简单:

  1. 确保在 setup.py中包含(通过 setup参数)所有你认为对程序运行很重要的文件(模块、包、脚本...)

  2. 澄清,是否有要添加的文件或要排除的文件。如果两者都不需要,那么就不需要使用 MANIFEST.in

  3. 如果需要 MANIFEST.in,则创建它。通常,如果您不使用 README.txtdocs文件,您可以添加 tests*/*.py文件、 README.rst文件,如果需要,还可以添加一些数据文件用于测试套件。

例如:

include README.rst
include COPYING.txt

要测试它,请运行 python setup.py sdist,并检查在 dist/下创建的 tarball。

这些不同的包装系统什么时候..。

比较今天和两年前的情况-情况要好得多-setuptools是正确的选择。你可以忽略的事实,distutils是一个有点破碎,是低水平的基础,因为 setuptools应该注意隐藏这些东西对你来说。

编辑 : 最后几个项目中,我使用 pbr来构建包含三行 setup.py的分发包,其余部分在 setup.cfgrequirements.txt中。没有必要关心 MANIFEST.in和其他奇怪的东西。尽管这个软件包需要更多的文档。请参见“ http://docs.openstack.org/development/pbr/”> http://docs.openstack.org/developer/pbr/

老问题,新答案:

不,你不需要 MANIFEST.in。然而,要让 setuptools完成你(通常)的意思,你需要使用 setuptools_scm,它在两个关键位置扮演 MANIFEST.in的角色:

  • 它确保在运行 sdist命令时打包所有相关文件(其中所有相关文件都被定义为“源代码管理下的所有文件”)
  • 当使用 include_package_data包含包数据作为 buildbdist_wheel的一部分时(同样: 源代码控制下的文件)

MANIFEST.in的历史理解是: 当你没有一个源代码控制系统时,你需要一些其他的机制来区分“源文件”和“恰好在你工作目录中的文件”。但是,您的项目是在源代码控制之下的(对吗? ? ?) 所以不需要 MANIFEST.in本文提供更多信息.