包括源分发中的文件 MANIFEST.in

当建立一个 source distribution 对于您的包,默认情况下只包括一组最少的文件。您可能会发现自己希望在源分发中包含额外的文件,例如作者/贡献者文件,以及 docs/ 目录,或用于测试的数据文件目录。甚至可能有额外的文件 need 包括;例如,如果 setup.py 计算项目的 long_description 通过同时读取自述文件和changelog文件,您将需要在sdist中包含这两个文件,以便从sdist构建或安装文件的人员获得正确的结果。

在源分发中添加和删除文件通过写入 MANIFEST.in 文件位于项目根目录。

SDIST中如何包含文件

默认情况下,源分发中包含以下文件:

  • 所有python源文件 py_modulespackages setup() 争论

  • 中提到的所有C源文件 ext_moduleslibraries setup() 争论

  • 由指定的脚本 scripts setup() 参数

  • 由指定的所有文件 package_datadata_files setup() 争论

  • 由指定的文件 license_file 选择权 setup.cfg (设置工具40.8.0+)

  • 与模式匹配的所有文件 test/test*.py

  • setup.py (或您称之为安装脚本的任何内容)

  • setup.cfg

  • README

  • README.txt

  • README.rst (python 3.7+或setuptools 0.6.27+)

  • README.md (设置工具36.4.0+)

  • MANIFEST.in

将上述文件添加到sdist后,将 MANIFEST.in (如果存在这样的文件)是为了在SDIST中添加和删除更多文件而执行的。甚至可以使用适当的 MANIFEST.in 命令。

在处理完 MANIFEST.in 文件,设置工具删除 build/ 目录以及任何名为 RCSCVS.svn 从SDIST,它添加了一个 PKG-INFO 文件和 *.egg-info 目录。此行为不能更改为 MANIFEST.in .

MANIFEST.in 命令

A MANIFEST.in 文件由命令组成,每行一个,指示安装工具添加或删除SDIST中的一些文件集。命令包括:

命令

描述

include pat1 pat2 ...

包括所有与所列模式匹配的文件

exclude pat1 pat2 ...

排除与列出的任何模式匹配的所有文件

recursive-include dir-pattern pat1 pat2 ...

包括目录匹配下的所有文件 dir-pattern 与列出的任何模式匹配的

recursive-exclude dir-pattern pat1 pat2 ...

排除目录匹配下的所有文件 dir-pattern 与列出的任何模式匹配的

global-include pat1 pat2 ...

包括源树中任何与所列模式匹配的文件

global-exclude pat1 pat2 ...

排除源树中任何与所列模式匹配的文件

graft dir-pattern

包括目录匹配下的所有文件 dir-pattern

prune dir-pattern

排除目录匹配下的所有文件 dir-pattern

这里的图案是球形图案: * 匹配零个或更多常规文件名字符(在Unix上,除正斜杠之外的所有字符;在Windows上,除反斜杠和冒号之外的所有字符); ? 匹配单个常规文件名字符,以及 [chars] 匹配方括号之间的任何一个字符(可能包含字符范围,例如, [a-z][a-fA-F0-9] )SETUPTOOLS还对 ** 匹配零个或多个字符,包括正斜杠、反斜杠和冒号。

目录模式是相对于项目目录的根目录的;例如, graft example* 将包括一个名为 examples 在项目根目录中,但不包括 docs/examples/ .

中的文件和目录名 MANIFEST.in 应该是 / -分隔;安装工具将自动将斜杠转换为本地平台的相应目录分隔符。

命令按其在 MANIFEST.in 文件。例如,给定命令:

graft tests
global-exclude *.py[cod]

目录树的内容 tests 将首先添加到SDIST,然后将SDIST中的所有文件 .pyc.pyo.pyd 扩展名将从SDIST中删除。如果命令的顺序相反,那么 *.pyc 文件等只能在添加之前从SDIST中删除。 tests 如果 tests 恰好包含 *.pyc 文件,它们最终会包含在SDIST中,因为排除发生在包含它们之前。