它发生了:你开始在项目中使用一个模块并且它可以工作,但你没有意识到它只是包含在你的 virtualenv 中,因为它是你正在使用的包的依赖项。 pip-missing-reqs 找到这些模块,以便您可以将它们包含在项目的requirements.txt 中。
或者,您有一个长期运行的项目,其中在requirements.txt 中包含一些不再在代码库中积极使用的包。 pip-extra-reqs 工具将找到这些模块,以便您可以删除它们。
假设您的项目遵循建议的示例项目的布局:
安装程序.py 安装程序.cfg 要求.txt 样本/__init__.py 样本/样本.py 样本/测试/test_sample.py
基本用法,在你的项目目录中运行:
<为您的项目激活 virtualenv> pip-missing-reqs --ignore-file=样本/测试/* 样本
这将找到“sample”中代码中的所有导入,并检查这些模块所属的包是否在requirements.txt 文件中。
此外,还可以检查requirements.txt中是否存在随后在项目中未使用的依赖项:
<为您的项目激活 virtualenv> pip-extra-reqs --ignore-file=样本/测试/* 样本
这将找到在requirements.txt中列出但未由示例导入的任何内容。
为了让您的生活更轻松,请将以下内容复制到您的 tox.ini 中:
[testenv:pip-check-reqs] deps=-rrequirements.txt 命令= pip-missing-reqs --ignore-file=样本/测试/* 样本 pip-extra-reqs --ignore-file=样本/测试/* 样本
您的测试文件有时会与应用程序源(上面示例中的“示例”)位于同一目录中。这些测试的要求通常不应包含在requirements.txt 文件中,并且您不希望此工具为这些测试生成错误的命中。
您可以使用 --ignore-file 选项(简写为 -f)从检查中排除这些测试文件。允许该选项的多个实例。
如果您的项目具有有条件导入的模块或有条件包含的需求,您可以使用 --ignore-module (简写为 -m)按名称(或 glob 模式)从检查中排除某些模块:
# 忽略模块垃圾邮件 pip-missing-reqs --ignore-module=垃圾邮件样本 # 也忽略整个垃圾邮件包 pip-missing-reqs --ignore-module=spam --ignore-module=spam.* 示例
如果您的项目使用pyproject.toml
,则有多种方法可以使用pip-check-reqs
。
一种方法是使用外部工具将pyproject.toml
转换为requirements.txt
:
# 需要 `pip install pdm` pdm 导出 --pyproject > 要求.txt # 或者,如果您更喜欢 uv,`pip install uv` uv pip 编译 --no-deps pyproject.toml > 要求.txt
然后您可以像往常一样使用pip-missing-reqs
和pip-extra-reqs
。
另一种方法是在pyproject.toml
文件中使用requirements.txt
文件,例如使用 setuptools 构建后端:
[ build-system ]
build-backend = " setuptools.build_meta "
requires = [
" setuptools " ,
]
[ project ]
...
dynamic = [ " dependencies " ]
[ tool . setuptools . dynamic ]
dependencies = { file = " requirements.txt " }
Josh Hesketh——重构了代码并贡献了 pip-extra-reqs 工具。
Wil Cooley——他处理了 normalize_name 的删除并修复了一些错误。