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.txt或setup.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拥有自营优化功能,请参阅优化进口....在上面列出的任何其他步骤之前使用此功能会很有用.

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.
最好的办法是使用一个没有软件包的(新的)python虚拟环境,或者只使用那些你确定需要的软件包,测试你的软件包 - 安装丢失的软件包,当遇到问题时,对于大多数软件而言应该很快,然后使用命令列出您真正需要的包.你可以使用更好的方法来创建包含的轮子.
另一种方法是:pippip freezepip wheel
请注意,要使任何依赖项检查正常工作,建议避免在函数内进行条件导入和导入.
另请注意,为了确保您拥有所有内容,最好从依赖项列表中构建新的虚拟环境并进行安装,然后重新测试您的代码.