Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使pip卸载其他软件包不再需要的软件包?_Python_Pip - Fatal编程技术网

Python 如何使pip卸载其他软件包不再需要的软件包?

Python 如何使pip卸载其他软件包不再需要的软件包?,python,pip,Python,Pip,例如,我可能安装了pkg1,这需要pkg2和pkg3。我安装的其他软件包都不需要这两个。因此,在pip卸载pkg1期间或之后,我如何才能让pip卸载pkg2和pkg3?我认为pip无法做到这一点 如果你在virtualenv中,你只需删除它并重新安装到新的 如果您在系统中,则不应使用pip,而应使用分发包管理器。您必须手动执行此操作,因为pip不知道其他包依赖于什么pkg2和pkg3 最好的方法是使用;它允许您将Python包与系统(基本)Python隔离。pip中没有简单的内置命令或标志来执行

例如,我可能安装了
pkg1
,这需要
pkg2
pkg3
。我安装的其他软件包都不需要这两个。因此,在
pip卸载pkg1
期间或之后,我如何才能让pip卸载
pkg2
pkg3

我认为pip无法做到这一点

如果你在virtualenv中,你只需删除它并重新安装到新的


如果您在系统中,则不应使用pip,而应使用分发包管理器。

您必须手动执行此操作,因为pip不知道其他包依赖于什么
pkg2
pkg3


最好的方法是使用;它允许您将Python包与系统(基本)Python隔离。

pip中没有简单的内置命令或标志来执行此操作,但在卸载pkg1之前,您可以确定依赖项:

$ pip show pkg1 | grep Requires
您可以使用一点bash fu快速获得软件包需求的摘要:

$ for P in $(pip list | awk '{print $1}') ; do echo -n $P::' '; pip show $P | grep Requires ; done
然后,对于第一个命令显示的任何包(pkg2和pkg3),如果它们在第二个命令中没有显示为任何其他包的依赖项,那么您也可以显式地
pip uninstall
这些包

您还可以找到不依赖于任何其他包的所有包:

$ cat <(pip show $(pip list | awk '{print $1}') | grep Requires | sed -e s/Requires:// -e s/,//g | xargs -n 1) <(pip list | awk '{print $1}') | sort | uniq -u

$cat我认为说“你永远不应该使用pip”有点强。尤其是当它将被包括在内时。问得好。看起来它是在pip的1.3版中添加的。