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

myi*_*rim 36 python refactoring pip pycharm requirements.txt

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

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

dj-database-url
Run Code Online (Sandbox Code Playgroud)

包用作

dj_database_url
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*kAb 66

您可以在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'.请注意,它只显示一个包名称,但requirements.txt如果调用了section ,它实际上会将所有使用过的包添加到.

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

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

还要注意的是PyCharm拥有自营优化功能,请参阅优化进口....在上面列出的任何其他步骤之前使用此功能会很有用.

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

  • 正如@Nwilson 指出的那样,虽然这是一个很好的尝试,但对于模块名称与包名称不同的包来说,这不是一个很好的解决方案。此外,PyCharm 不会将版本号添加到要求中,这对于任何试图清理生产中项目的人来说都是有问题的。 (2认同)
  • 更新较新版本的 PyCharm(对我来说适用于 2020.3 Professional):您可以使用“同步 Python 需求”工具(在“工具”菜单下)查找并删除未使用的内容,而不是从头开始并构建新的requirements.txt包(选中“删除未使用的要求”框)。 (2认同)

Flo*_*ian 21

You can find obsolete dependencies by using deptry, a command line utility that checks for various issues with a project's dependencies, such as unused, missing or transitive dependencies.

Add it to your project with

pip install deptry
Run Code Online (Sandbox Code Playgroud)

and then run

deptry .
Run Code Online (Sandbox Code Playgroud)

Example output:

Scanning 2 files...

requirements.txt: DEP002 'pandas' defined as a dependency but not used in the codebase
Found 1 dependency issue.
Run Code Online (Sandbox Code Playgroud)

Note that for the best results, you should be using a virtual environment for your project, see e.g. here.

Disclaimer: I am the author of deptry.


Ste*_*nes 9

最好的办法是使用一个没有软件包的(新的)python虚拟环境,或者只使用那些你确定需要的软件包,测试你的软件包 - 安装丢失的软件包,当遇到问题时,对于大多数软件而言应该很快,然后使用命令列出您真正需要的包.你可以使用更好的方法来创建包含的轮子. 另一种方法是:pippip freezepip wheel

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

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

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

  • @miyalys - 感谢您对此进行标记 - 在 pypi 上快速搜索会出现 Snakefood3 (https://github.com/Trim21/snakefood3),我还没有尝试过,因为我更喜欢使用裸 venv 作为起点。 (2认同)

小智 8

pycharm中,转到“工具”->“同步 Python 要求”。有一个“删除未使用的要求”复选框。