python项目需要一个MANIFEST.in,应该包含什么?

时间:2014-07-13 23:06:24

标签: python setuptools

“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文件,

  1. 我需要MANIFEST.in吗?
  2. 应该包括什么?
  3. 什么时候将所有这些不同的包装系统和方法组合成一个简单的过程?

2 个答案:

答案 0 :(得分:87)

Re:"我需要一个MANIFEST.in吗?

不,您不必使用MANIFEST.indistutilssetuptools都包含在源代码中 分发包setup.py中提到的所有文件 - modules,package python files, README.txttest/test*.py。如果您希望在分发包中拥有这一切,那么您就可以 不必使用MANIFEST.in

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

Re:应该包括什么?

程序很简单:

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

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

  3. 如果需要MANIFEST.in,请创建它。通常,如果您不使用tests*/*.pyREADME.rst文件以及可能的测试套件数据文件,则会添加README.txt个文件docs

  4. 例如:

    include README.rst
    include COPYING.txt
    

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

    所有这些不同的包装系统何时......

    比较今天和2年前的情况 - 情况要好得多 - setuptools是要走的路。你可以忽略这样一个事实,distutils有点破碎,并且是setuptools的低级基础,因为setuptools会照顾你隐藏这些东西。

    编辑:我使用pbr的最后几个项目用于构建包含三行setup.py的分发包,其余项目位于setup.cfgrequirements.txt。无需关心MANIFEST.in和其他奇怪的东西。即使该软件包需要更多文档。见http://docs.openstack.org/developer/pbr/

答案 1 :(得分:2)

旧问题,新答案:

否,您不需要MANIFEST.in。但是,要使setuptools达到您通常的意思,您确实需要使用setuptools_scm,它在两个关键位置都扮演MANIFEST.in的角色:

  • 它可确保在运行sdist命令时将所有相关文件打包(其中所有相关文件都定义为“在源代码管理下的所有文件”)
  • 使用include_package_data将数据包数据作为buildbdist_wheel的一部分时。 (再次:在源代码管理下的文件)

MANIFEST.in的历史理解是:当您没有源代码控制系统时,您需要一些其他机制来区分“源文件”和“碰巧在您的工作目录中的文件”。但是,您的项目处于源代码控制之下(正确吗?),因此不需要MANIFEST.inMore info in this article