包括源分发中的文件 MANIFEST.in
¶
当建立一个 source distribution 对于您的包,默认情况下只包括一组最少的文件。您可能会发现自己希望在源分发中包含额外的文件,例如作者/贡献者文件,以及 docs/
目录,或用于测试的数据文件目录。甚至可能有额外的文件 need 包括;例如,如果 setup.py
计算项目的 long_description
通过同时读取自述文件和changelog文件,您将需要在sdist中包含这两个文件,以便从sdist构建或安装文件的人员获得正确的结果。
在源分发中添加和删除文件通过写入 MANIFEST.in
文件位于项目根目录。
SDIST中如何包含文件¶
默认情况下,源分发中包含以下文件:
所有python源文件
py_modules
和packages
setup()
争论中提到的所有C源文件
ext_modules
或libraries
setup()
争论由指定的脚本
scripts
setup()
参数由指定的所有文件
package_data
和data_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/
目录以及任何名为 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中,因为排除发生在包含它们之前。