卸载软件包时,如何在pipenv中自动删除依赖的Python软件包?

2024-06-12 07:13:14 发布

您现在位置:Python中文网/ 问答频道 /正文

当您使用pipenv安装软件包时,所有依赖的软件包也将随它一起安装。用pipenv uninstall卸载该包不会自动删除依赖的包

如何在pipenv中获得pip-autoremove的等效功能

例如:

$ cd testpipenv
$ pipenv install requests
$ pipenv shell
(testpipenv) $ pipenv graph

requests==2.24.0
 - certifi [required: >=2017.4.17, installed: 2020.6.20]
 - chardet [required: >=3.0.2,<4, installed: 3.0.4]
 - idna [required: >=2.5,<3, installed: 2.10]
 - urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.9]

(testpipenv) $ pipenv uninstall requests
(testpipenv) $ pip list

Package    Version
---------- ---------
certifi    2020.6.20
chardet    3.0.4
idna       2.10
pip        20.1.1
setuptools 47.3.1
urllib3    1.25.9
wheel      0.34.2

仍然安装了requests的依赖包,例如urllib3,可以通过

(testpipenv) $ python 
>>> import urllib3

这里也讨论了这一点:Pipenv uninstall doesn't uninstall dependencies - issue #1470,我还没有找到关于使用pipenv自动删除包的最新指令集

使用的版本:

  • pipenv,版本2020.5.28
  • Python 3.6.10

Tags: pipinstalled功能版本pipenvrequiredcdrequests
1条回答
网友
1楼 · 发布于 2024-06-12 07:13:14

TL;博士

(testpipenv) $ pipenv uninstall requests && pipenv clean

为了仅使用pipenv命令获得与pip-autoremove类似的功能,我执行了以下操作,继续上面的示例:

(testpipenv) $ pipenv graph
 
certifi==2020.6.20
chardet==3.0.4
idna==2.10
urllib3==1.25.9

这表明仍然安装了依赖软件包,但这些软件包已从Pipfile.lock中删除。因此,使用pipenv clean将删除它们:

(testpipenv) $ pipenv clean

Uninstalling certifi…
Uninstalling idna…
Uninstalling urllib3…
Uninstalling chardet…

总之

(testpipenv) $ pipenv uninstall requests && pipenv clean

。。。将删除所有依赖的包,并且最接近于pip-autoremove

这可能比预期的更具攻击性,因为clean命令“卸载Pipfile.lock中未指定的所有软件包”如果在使用clean之前未将软件包添加到Pipfile.lock,则此命令可能会删除比预期更多的软件包。我不知道这是否真的是一个问题,因为uninstall会自动更新Pipfile.lock,除非指定了其他选项,如 skip-lock


另一种选择是

pipenv  rm && pipenv install

。。。它将删除所有内容并基于Pipfile.lock重建虚拟环境。这会起作用,但速度很慢,因为它会删除整个虚拟环境并重新安装所有内容,但不需要的依赖项除外

相关问题 更多 >