包括源分发中的文件 MANIFEST.in¶
当建立一个 source distribution 对于您的包,默认情况下只包括一组最少的文件。您可能会发现自己希望在源分发中包含额外的文件,例如作者/贡献者文件,以及 docs/ 目录,或用于测试的数据文件目录。甚至可能有额外的文件 need 包括;例如,如果 setup.py 计算项目的 long_description 通过同时读取自述文件和changelog文件,您将需要在sdist中包含这两个文件,以便从sdist构建或安装文件的人员获得正确的结果。
在源分发中添加和删除文件通过写入 MANIFEST.in 文件位于项目根目录。
SDIST中如何包含文件¶
默认情况下,源分发中包含以下文件:
所有python源文件
py_modules和packagessetup()争论中提到的所有C源文件
ext_modules或librariessetup()争论由指定的脚本
scriptssetup()参数由指定的所有文件
package_data和data_filessetup()争论由指定的文件
license_file选择权setup.cfg(设置工具40.8.0+)与模式匹配的所有文件
test/test*.pysetup.py(或您称之为安装脚本的任何内容)setup.cfgREADMEREADME.txtREADME.rst(python 3.7+或setuptools 0.6.27+)README.md(设置工具36.4.0+)MANIFEST.in
将上述文件添加到sdist后,将 MANIFEST.in (如果存在这样的文件)是为了在SDIST中添加和删除更多文件而执行的。甚至可以使用适当的 MANIFEST.in 命令。
在处理完 MANIFEST.in 文件,设置工具删除 build/ 目录以及任何名为 RCS , CVS 或 .svn 从SDIST,它添加了一个 PKG-INFO 文件和 *.egg-info 目录。此行为不能更改为 MANIFEST.in .
MANIFEST.in 命令¶
A MANIFEST.in 文件由命令组成,每行一个,指示安装工具添加或删除SDIST中的一些文件集。命令包括:
命令 |
描述 |
|---|---|
|
包括所有与所列模式匹配的文件 |
|
排除与列出的任何模式匹配的所有文件 |
|
包括目录匹配下的所有文件 |
|
排除目录匹配下的所有文件 |
|
包括源树中任何与所列模式匹配的文件 |
|
排除源树中任何与所列模式匹配的文件 |
|
包括目录匹配下的所有文件 |
|
排除目录匹配下的所有文件 |
这里的图案是球形图案: * 匹配零个或更多常规文件名字符(在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中,因为排除发生在包含它们之前。
