从需求文件中删除未使用的包

97 投票
5 回答
93232 浏览
提问于 2025-04-18 17:45

有没有什么简单的方法可以从requirements文件中删除不再使用的包呢?

我写了一个bash脚本来完成这个任务,但结果并没有达到我的预期。因为有些包在使用时并不是按照它们在PyPI上的项目名称来引用的。例如:

dj-database-url

这个包是以

dj_database_url

的方式被使用的。

我的项目在requirements文件中有很多包,所以一个一个去查找实在是太麻烦了,容易出错,而且耗时太长。我发现目前的IDE(集成开发环境)还没有这个功能。

5 个回答

0

我成功地使用了 pip-check-reqs 这个工具。

通过输入命令 pip-extra-reqs your_directory,它会检查 your_directory 这个文件夹里所有未使用的依赖项。

你可以用 pip install pip-check-reqs 来安装它。

8

pycharm中,找到工具 -> 同步Python依赖。这里有一个'移除未使用的依赖'的复选框。

23

最好的办法是使用一个(全新的)Python虚拟环境(venv),里面要有任何包,或者只安装你确实知道需要的那些包。先测试你的程序,遇到缺少的包时用pip来安装,这样大部分软件都能很快解决问题。然后用pip freeze命令来列出你真正需要的包。更好的是,你可以用pip wheel来创建一个包含这些包的轮子文件。
另一种方法是:

  1. 使用pylint检查每个文件,找出未使用的导入并删除它们(其实你应该一直这样做),
  2. 运行你的测试,确保这样做是正确的,
  3. 使用像snakefoodsnakefood3这样的工具生成你新的依赖列表。

需要注意的是,为了让依赖检查工作得更好,建议避免使用条件导入和在函数内部导入。

另外,为了确保你有所有需要的东西,最好是建立一个新的虚拟环境,然后根据你的依赖列表安装包,最后再测试你的代码。

25

你可以通过使用deptry这个命令行工具来找到过时的依赖项。它可以检查项目中的各种问题,比如哪些依赖没用、缺失或者是间接依赖。

你可以通过以下方式把它添加到你的项目中:

pip install deptry

然后运行:

deptry .

示例输出:

Scanning 2 files...

requirements.txt: DEP002 'pandas' defined as a dependency but not used in the codebase
Found 1 dependency issue.

请注意,为了获得最佳效果,建议你在项目中使用虚拟环境,具体可以参考这里

免责声明:我是deptry的作者。

138

你可以在PyCharm中使用代码检查功能。

  1. 先把你的requirements.txt文件里的内容删掉,但要保留这个空文件。
  2. 把你的项目加载进来,
  3. 在PyCharm中,点击代码 -> 检查代码...
  4. 在弹出的对话框中选择整个项目选项,然后点击确定。 在检查结果面板中找到包要求这一部分,位置在Python下面(注意,只有当有requirements.txtsetup.py文件时,这一部分才会显示)。 这一部分会包含以下信息之一:
  • 如果requirements.txt中列出的某个包没有在任何.py文件中使用,会显示包要求 '<package>' 没有满足
  • 如果某个包在.py文件中被使用,但没有在requirements.txt中列出,会显示包 '<package>' 没有在项目要求中列出

你需要关注第二种检查结果。 你可以通过右键点击包要求部分,选择应用修复 '将要求 '<package>' 添加到 requirements.txt'来把所有使用过的包添加到requirements.txt中。注意,这里只会显示一个包的名字,但实际上如果对这一部分进行操作,会把所有使用过的包都添加到requirements.txt中。

如果你愿意,也可以一个一个地添加,只需右键点击对应某个包的检查结果,选择应用修复 '将要求 '<package>' 添加到 requirements.txt',对每个这样的检查结果重复这个操作。

完成后,你可以创建一个干净的虚拟环境,并从新的requirements.txt中安装包。

另外,PyCharm还有一个导入优化的功能,可以查看优化导入...。在进行上述其他步骤之前,使用这个功能会很有帮助。

为所有未列在 requirements.txt 中的包应用修复

撰写回答