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

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

我为这个任务编写了一个 bash 脚本,但是它没有像我预期的那样工作。因为,有些包没有在它们的 PyPI 项目名称之后使用。例如:

dj-database-url

包用作

dj_database_url

我的项目在它自己的需求文件中有许多包,因此,一个一个地搜索它们太麻烦,容易出错,并且花费太多时间。在我搜索的时候,IDE 还没有这个属性。

63361 次浏览

最好的办法是使用(新鲜的) python venv/Virtual-env 和 没有软件包,或者只使用那些你肯定知道你需要的软件包,测试你的软件包——在遇到问题时用 pip安装丢失的软件包,这对大多数软件来说应该是很快的,然后使用 pip freeze命令列出你真正需要的软件包。更好的是,您可以使用 pip wheel创建一个包含。
另一种方法是:

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

注意,对于任何依赖性检查,最好避免在函数中进行条件导入和导入。

还要注意的是,要想成为 当然,你拥有一切,那么构建一个新的 venv/Virtual-env 并从依赖项列表中安装,然后重新测试代码是一个好主意。

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

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

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

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

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

还要注意 PyCharm 具有导入优化特性,请参见 优化进口..。。在上面列出的任何其他步骤之前使用这个特性可能会很有用。

Apply fix for all packages not listed in requirements.txt

我已经成功地使用了 检查要求

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

pip install pip-check-reqs安装它。

魅惑术中转到 工具-> 同步 Python 需求。有一个“删除未使用的需求”复选框。

您可以使用 Deptry查找过时的依赖项,Deptry是一个命令行实用程序,用于检查与项目依赖项有关的各种问题,如过时的、缺失的或传递性依赖项。

将其添加到项目中

pip install deptry

然后逃跑

deptry .

输出示例:

-----------------------------------------------------


The project contains obsolete dependencies:


Flask
scikit-learn
scipy


Consider removing them from your projects dependencies. If a package is used for development purposes, you should add
it to your development dependencies instead.


-----------------------------------------------------

注意,为了获得最好的结果,您应该为您的项目使用一个虚拟环境,参见 给你

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