71

有什么简单的方法可以从需求文件中删除不再使用的包吗?

我为此任务编写了一个 bash 脚本,但是它没有按我的预期工作。因为,有些包没有按照它们的 PyPI 项目名称使用。例如;

dj-database-url

包用作

dj_database_url

我的项目在自己的需求文件中有很多包,因此,逐个搜索它们太混乱、容易出错并且需要太多时间。正如我搜索的那样,IDE 还没有这个属性。

4

3 回答 3

116

您可以在PyCharm中使用代码检查。

  1. 删除你的内容,requirements.txt但保留空文件。
  2. 加载你的项目,
  3. PyCharm 转到Code -> Inspect code....
  4. 在对话框中选择Whole project选项并单击OK。在检查结果面板中找到Package requirements下面的部分(请注意,此部分只有在有文件Python时才会显示)。该部分将包含以下消息之一:requirements.txtsetup.py
  • Package requirement '<package>' is not satisfied如果有任何 .py 文件中列出requirements.txt但未使用的任何包。
  • Package '<package>' is not listed in project requirements如果 .py 文件中使用了任何包,但未在 .py 文件中列出requirements.txt

您对第二次检查感兴趣。您可以requirements.txt通过右键单击该Package requirements部分并选择来添加所有使用过的包Apply Fix 'Add requirements '<package>' to requirements.txt'。请注意,它只会显示一个包名称,但它实际上会将所有使用过的包添加到requirements.txtif called for 部分。

如果需要,您可以逐个添加,只需右键单击某个包对应的检查并选择Apply Fix 'Add requirements '<package>' to requirements.txt',重复此类检查。

之后,您可以创建干净的虚拟环境并从新的requirements.txt.

另请注意,PyCharm 具有导入优化功能,请参阅优化导入...。在上面列出的任何其他步骤之前使用此功能可能很有用。

对 requirements.txt 中未列出的所有包应用修复

于 2014-08-24T10:53:29.350 回答
18

最好的办法是使用没有包的(的)python venv/virtual-env ,或者只有那些你确定需要的包,测试你的包 -当你遇到问题时安装丢失的包,这对于大多数软件来说应该很快使用命令列出你真正需要的包。更好的是你可以用它来创建一个包含包的轮子。 另一种方法是:pippip freezepip wheel

  1. 使用pylint检查每个文件是否有未使用的导入并删除它们(无论如何你都应该这样做),
  2. 运行测试以确保它是正确的,
  3. 使用像snakefoodsnakefood3这样的工具来生成你的新依赖列表

请注意,为了使任何依赖项检查正常工作,建议避免在函数内进行条件导入和导入。

另请注意,为确保您拥有一切,最好构建一个新的 venv/virtual-env 并从您的依赖项列表中安装,然后重新测试您的代码。

于 2014-08-19T05:34:56.857 回答
0

我已经成功使用了pip-check-reqs

使用命令pip-extra-reqs your_directory它将检查所有未使用的依赖项your_directory

安装它pip install pip-check-reqs

于 2017-01-23T00:27:53.293 回答