MANIFEST.in
是一个用于控制 Python 包分发时包含哪些文件的配置文件。它通常与 setup.py
文件配合使用,以确保在打包和分发时,某些特定的文件或目录能够包含在最终的包中。默认情况下,Python 的打包工具(如 setuptools
)会自动包括一些文件,比如 Python 源码文件(.py
)、README
、LICENSE
等。但是,如果你想要在包中包含其他类型的文件(例如,文档、配置文件、示例数据等),你就需要使用 MANIFEST.in
来指定。
示例 MANIFEST.in
以下是一个典型的 MANIFEST.in
文件示例,它将 README、LICENSE 文件、docs
目录中的 Markdown 文件以及 examples
目录中的 Python 文件包含在包中,同时排除 logs
目录中的所有日志文件:
include README.md
include LICENSE.txt
recursive-include docs *.md
recursive-include examples *.py
global-exclude *.log
总结
MANIFEST.in
文件主要用于精细控制哪些文件应包含在 Python 分发包中。它对于确保包中包含必要的资源文件(如文档、数据文件等)或排除不必要的文件(如测试文件、日志文件等)非常有用。通过正确配置 MANIFEST.in
文件,你可以确保最终用户获得一个完整且干净的包。
工作流程
MANIFEST.in
文件的工作流程主要涉及到 Python 包的打包和分发过程。具体来说,它在生成分发包(如源代码分发包 .tar.gz
或 .zip
,以及二进制分发包 .whl
)时,控制哪些文件应该包含在最终的分发包中。以下是 MANIFEST.in
文件的工作流程概述:
1. 创建 MANIFEST.in
文件
- 在项目根目录下创建一个名为
MANIFEST.in
的文件。 - 在文件中使用不同的命令(如
include
、exclude
、graft
、prune
等)指定需要包含或排除的文件和目录。
2. 运行 setup.py
构建分发包
- 当你运行
python setup.py sdist
(用于生成源代码分发包)或python setup.py bdist_wheel
(用于生成二进制分发包)时,setuptools
会读取并解析setup.py
和MANIFEST.in
文件。 setuptools
根据MANIFEST.in
文件中的指令生成一个名为MANIFEST
的文件。这个文件列出了所有将要包含在分发包中的文件。- 然后,
setuptools
根据MANIFEST
文件将指定的文件和目录打包进分发包中。
3. 生成 MANIFEST
文件
setuptools
自动生成的MANIFEST
文件是一个临时文件,列出了所有最终将包含在分发包中的文件。- 你可以查看这个文件来了解哪些文件被包含在分发包中,但通常开发者不需要直接修改它。
4. 打包和分发
- 在生成
MANIFEST
文件后,setuptools
会将这些文件打包为.tar.gz
、.zip
或.whl
等格式的分发包。 - 这些分发包随后可以上传到 Python Package Index (PyPI) 或其他分发平台,供其他开发者或用户下载和安装。
5. 安装包
- 当用户使用
pip install package-name
安装包时,pip
会下载分发包并安装其中包含的文件。 MANIFEST.in
文件的配置确保了用户在安装包时得到的是一个完整的包,包括了所有必要的文件(如文档、配置文件等),而不包含不必要的文件(如测试文件、开发日志等)。
总结
MANIFEST.in
文件在整个打包和分发过程中扮演着控制包内容的重要角色。通过这个文件,开发者可以精确控制哪些文件应该包含在最终的分发包中,这确保了用户能够获得所需的所有资源,并避免了不必要的文件被包含在包中。