检查Python源包中的MANIFEST.in以检查完整性
项目描述
check-manifest
您是Python开发者吗?您是否已上传包到Python包索引?您是否意外地上传了缺少某些文件的 损坏 包?如果是这样,check-manifest就是为您准备的。
快速入门
$ pip install check-manifest $ cd ~/src/mygreatpackage $ check-manifest
您可以让脚本帮助您更新您的MANIFEST.in
$ check-manifest -u -v listing source files under version control: 6 files and directories building an sdist: check-manifest-0.7.tar.gz: 4 files and directories lists of files in version control and sdist do not match! missing from sdist: tests.py tox.ini suggested MANIFEST.in rules: include *.py include tox.ini updating MANIFEST.in $ cat MANIFEST.in include *.rst # added by check_manifest.py include *.py include tox.ini
命令行参考
$ check-manifest --help usage: check-manifest [-h] [--version] [-v] [-c] [-u] [-p PYTHON] [--ignore patterns] [source_tree] Check a Python MANIFEST.in file for completeness positional arguments: source_tree location for the source tree (default: .) optional arguments: -h, --help show this help message and exit --version show program's version number and exit -v, --verbose more verbose output (default: False) -c, --create create a MANIFEST.in if missing (default: False) -u, --update append suggestions to MANIFEST.in (implies --create) (default: False) -p PYTHON, --python PYTHON use this Python interpreter for running setup.py sdist (default: /home/mg/.venv/bin/python) --ignore patterns ignore files/directories matching these comma- separated patterns (default: None) --ignore-bad-ideas patterns ignore bad idea files/directories matching these comma-separated patterns (default: [])
配置
您可以使用 [tool.check-manifest] 部分配置check-manifest以忽略某些文件模式,该部分位于您的 pyproject.toml 文件中或 setup.cfg 或 tox.ini 中的 [check-manifest] 部分。示例
# pyproject.toml [tool.check-manifest] ignore = [".travis.yml"] # setup.cfg or tox.ini [check-manifest] ignore = .travis.yml
请注意,在 setup.cfg 和 tox.ini 文件中,列表由换行符分隔。
以下选项被认可
- ignore
check-manifest将忽略的文件名模式列表。如果您想保留版本控制系统中不应包含在源分发中的文件,请使用此选项。默认忽略列表是
PKG-INFO *.egg-info *.egg-info/* setup.cfg .hgtags .hgsigs .hgignore .gitignore .bzrignore .gitattributes .github/* .travis.yml Jenkinsfile *.mo
- 忽略默认规则
如果设置为 true,您的 ignore 模式将替换默认忽略列表,而不是添加到它。
- 忽略不良想法
check-manifest 生成的文件检查将忽略的文件名模式列表。如果您想在版本控制系统中保留生成的文件,尽管通常这是一个糟糕的想法,请使用此功能。
版本控制集成
使用 pre-commit,check-manifest 可以成为您 git 工作流程的一部分。将以下内容添加到您的 .pre-commit-config.yaml 文件中。
repos:
- repo: https://github.com/mgedmin/check-manifest
rev: "0.49"
hooks:
- id: check-manifest
如果您在没有网络的条件下运行 pre-commit,可以使用 args: [--no-build-isolation] 以防止 pip install 联接到 PyPI。如果您有 pip / setuptools / wheel 以外的 build-system.requires,则需要在 additional_dependencies 中列出这些依赖项。
repos:
- repo: https://github.com/mgedmin/check-manifest
rev: ... # pick a valid tag / revision
hooks:
- id: check-manifest
args: [--no-build-isolation]
additional_dependencies: [setuptools-scm]
变更日志
0.49 (2022-12-05)
添加 Python 3.11 支持。
删除 Python 3.6 支持。
排除更多常见的开发/测试文件。
0.48 (2022-03-13)
0.47 (2021-09-22)
修复针对名称中包含破折号的包的 setuptools_scm 修复方法(#145)。
0.46 (2021-01-04)
现在 pre-commit 插件始终使用 Python 3。
0.45 (2020-10-31)
添加 Python 3.9 支持。
删除 Python 3.5 支持。
从 pep517 切换到 python-build(#128)。
添加 --no-build-isolation 选项,以便在没有互联网连接的情况下,check-manifest 可以成功构建基于 pep517 的分发。使用 --no-build-isolation,您必须预先安装 build-system.requires。(#128)。
0.44 (2020-10-03)
如果项目不使用 git 子模块(即没有 .gitsubmodules 文件),则尝试避免将 --recurse-submodules 传递给 git ls。这应该使 check-manifest 能够在旧版本的 git 上再次工作,只要您不使用子模块(#124)。
0.43 (2020-09-21)
注意:check-manifest 0.43 需要 git 版本 2.11 或更高版本。
0.42 (2020-05-03)
添加了 -q/--quiet 命令行参数。这将减少信息输出(例如在 CI 管道中使用时)的详细程度。
重新编写了忽略逻辑,使其与 setuptools 更兼容。这可能会引入一些回归,所以请提交错误报告!一个副作用是,现在 --ignore(或配置文件中的 ignore 设置)的处理方式与 MANIFEST.in 中的 global-exclude 相同,这意味着
它在文件树中的任何位置都可以匹配
如果匹配到目录,则忽略
您可以只通过忽略目录中的所有文件来忽略目录。您可以使用 --ignore=dir/** 来实现这一点。
这个决定并非不可更改:我可能在将来改变对 --ignore 的处理方式以匹配文件和目录,因为没有任何理由它必须是 setuptools 兼容的。
停止支持 Python 2.7。
0.41 (2020-02-25)
除非子命令失败,否则忽略子命令的 stderr。这避免了将警告消息视为文件名。(#110)
0.40 (2019-10-15)
添加 Python 3.8 支持。
0.39 (2019-06-06)
现在您可以将 check-manifest 作为 pre-commit 插件使用 (#100)。
0.38 (2019-04-23)
添加 Python 3.7 支持。
停止支持 Python 3.4。
将 GitHub 模板添加到默认忽略模式。
从 tox.ini 或 pyproject.toml 读取 check-manifest 配置。
0.37 (2018-04-12)
停止支持 Python 3.3。
支持使用 setuptools_scm 的包 (#68)。
请注意,setuptools_scm 通常使 MANIFEST.in 文件变得过时。只有当您打算构建 sdist 并使用该 sdist 来执行进一步的构建时,才需要它,而不是从源签出进行构建。
0.36 (2017-11-21)
更优雅地处理空 VCS 存储库 (#84)。
0.35 (2017-01-30)
Python 3.6 支持。
0.34 (2016-09-14)
修复由于存在只读文件而引起的 WindowsError (#74)。
0.33 (2016-08-29)
修复由于子目录中的 git 子模块而引起的 WindowsError (#73)。由 Loren Gordon 贡献。
0.32 (2016-08-16)
添加新的配置/命令行选项来忽略不良想法(ignore-bad-ideas)(问题 #67)。由 Brecht Machiels 贡献。
默认忽略名为 .hgsigs 的文件。由 Jakub Wilk 贡献。
0.31 (2016-01-28)
停止支持 Python 3.2。
忽略 MANIFEST.in 中的注释行 (问题 #66)。
0.30 (2015-12-10)
0.29 (2015-11-21)
修复仅使用命令名而不是路径中可找到的命令的 –python (问题 #57)。
0.28 (2015-11-11)
0.27 (2015-11-02)
修复 0.26 中引入的 Windows 上的完全破坏问题 (问题 #52)。 (这个错误——不必要地清除环境——可能也会在其他操作系统上引起与区域设置相关的问题。)
0.26 (2015-10-30)
0.25 (2015-05-27)
在 setup.py 中停止动态计算 install_requires:在有 pip 7 轮缓存的情况下,这不太好用。请使用 PEP-426 环境标记代替(这意味着我们现在需要 setuptools >= 0.7,pip >= 6.0,wheel >= 0.24)。
0.24 (2015-03-26)
确保 setup.py 未添加到 VCS 中不会导致难以理解的错误(问题 #46)。
0.23 (2015-02-12)
0.22 (2014-12-23)
0.21 (2014-06-13)
将版本控制的文件复制到干净的临时目录中时,不要丢弃 setup.cfg(《问题 #29》)。
0.20 (2014-05-14)
0.19 (2014-02-09)
0.18 (2014-01-30)
0.17 (2013-10-10)
读取现有的 MANIFEST.in 文件以获取要忽略的文件(《问题 #19》)。
0.16 (2013-10-01)
修复在 svn 用户名超过 12 个字符时的情况下的 Subversion 状态解析(《问题 #18》)。
0.15 (2013-09-20)
对所有文件路径进行归一化,避免一些目录重复遗漏。 (《问题 #16》) [maurits]
0.14 (2013-08-28)
0.13 (2013-07-31)
0.12 (2013-05-15)
为 Makefile 添加建议模式。
更通用的建议模式,应涵盖几乎所有内容。
zest.releaser 集成:跳过非 Python 软件包的 check-release 检查(问题 #9)。
0.11 (2013-03-20)
确保 MANIFEST.in 即使尚未添加到版本控制系统(VCS)中也不会被忽略(问题 #7)。
0.10 (2013-03-17)
check-manifest --version 现在会打印版本号。
不要为没有为目录添加规则而道歉(尤其是已经添加了包含该目录内文件的规则之后)。
Python 3 的支持由 Steven Myint 贡献。
默认忽略模式可以在 setup.cfg 中配置(问题 #3)。
0.9 (2013-03-06)
0.8 (2013-03-06)
zest.releaser 的入口点。如果您同时安装 zest.releaser 和 check-manifest,则在 fullrelease 期间会询问您是否要检查您的清单。
0.7 (2013-03-05)
首次从 Python 包索引发布的版本。
从 https://gist.github.com/4277075 移动到 https://github.com/mgedmin/check-manifest。
添加了 README.rst、CHANGES.rst、setup.py、tox.ini(但还没有真正的测试)、MANIFEST.in 和 Makefile。
修复了错误报告中的错误(当 setup.py 失败时,用户会收到 TypeError: descriptor ‘__init__’ requires an ‘exceptions.Exception’ object but received a ‘str’)。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。