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

时间:2014-08-19 05:28:40

标签: python pip refactoring pycharm requirements.txt

有没有简单的方法可以从要求文件中删除不再使用的包?

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

dj-database-url

包用作

dj_database_url

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

3 个答案:

答案 0 :(得分:52)

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

删除requirements.txt的内容,但保留空文件。 加载您的项目,PyCharm转到Code -> Inspect code...。在对话框中选择Whole project选项,然后点击OK。 在检查结果面板中,找到Package requirements下的Python部分(请注意,仅当有requirements.txtsetup.py文件时才会显示此部分。 该部分将包含以下消息之一:

  • Package requirement '<package>' is not satisfied如果requirements.txt中列出的任何包但未在任何.py文件中使用过。
  • Package '<package>' is not listed in project requirements如果.py文件中使用了任何软件包,但未在requirements.txt中列出。

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

如果需要,可以逐个添加,只需右键单击与某个包对应的检查,然后选择Apply Fix 'Add requirements '<package>' to requirements.txt',对每种检查重复一次。

之后,您可以创建干净的虚拟环境并从新的requirements.txt安装软件包。

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

Apply fix for all packages not listed in requirements.txt

答案 1 :(得分:7)

最好的办法是使用(新鲜)python virtual-env和 no 包,或者只使用你确定需要的那些,测试你的包 - 安装缺失当您遇到问题时,pip的软件包应该对大多数软件来说非常快,然后使用pip freeze命令列出您真正需要的软件包。更好的是,您可以使用pip wheel创建包含的轮子。
另一种方法是:

  1. 使用pylint检查每个文件是否有未使用的导入并将其删除,(无论如何你应该这样做),
  2. 运行测试以确保它是正确的,
  3. 使用snakefood之类的工具生成新的依赖项列表
  4. 请注意,要使任何依赖项检查正常工作,建议避免在函数内进行条件导入和导入。

    另请注意,要确定您拥有所有内容,那么最好从依赖项列表中构建新的虚拟环境并进行安装,然后重新测试您的代码。

答案 2 :(得分:0)

我已成功使用pip-check-reqs

使用命令pip-extra-reqs your_directory,它将检查your_directory

中所有未使用的依赖项

使用pip install pip-check-reqs安装。