2011-10-27 197 views
62

当您使用pip安装软件包时,所有必需的软件包也将随它一起安装(依赖项)。卸载该软件包是否也会删除相关软件包?使用“pip”卸载软件包是否也删除相关软件包?

+1

你为什么不试试看看?我会尽力回答你的问题,但由于某些原因,现在pip无法在这里获得包索引。 –

+2

@ThomasVanderStichele因为那么答案将不会在网上提供给未来的Google员工:) – Mark

+0

我在[pip新闻组]中找到了答案(https://groups.google.com/d/topic/python-virtualenv/JqIbyUDy2-E/讨论)小人们不希望这种功能,至少现在。多么可怜! –

回答

42

不,不卸载的依赖包:

$ pip install specloud 
$ pip freeze 

云南黑籽== 0.6.1
鼻子== 1.1.2
木偶奇遇记== 0.3
specloud == 0.4 0.5

$ pip uninstall specloud 
$ pip freeze 

云南黑籽== 0.6.1
鼻子== 1.1.2
木偶奇遇记== 0.3

正如你可以看到所有的包都仍然存在,但不是specloud包本身。

88

您可以安装并使用pip-autoremove实用工具删除软件包和未使用的依赖项。

# install pip-autoremove 
pip install pip-autoremove 
# remove "somepackage" plus its dependencies: 
pip-autoremove somepackage -y 
+14

最后更新是一年前。今天尝试使用它并惨遭破产。 –

+5

它似乎为我工作。 – se210

+5

也为我工作。 – timkofu

4

我已经成功地删除使用此bash的行包的依赖关系:

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done 

这个工作对PIP 1.5.4

+18

尽管从技术上讲,这个解决方案*成功地删除了所有的依赖关系,正如其他答案中提到的那样,它*还*卸载了对目标**不唯一的依赖项,包括从系统包安装的依赖项。例如,在我的系统上,这个脚本最终失败了,因为目标包与pip有相关的依赖关系,所以pip在脚本完成之前卸载了它自己的依赖关系,然后失败了。 – sinisterstuf

+0

也在'8.1.2'上工作。 – vyscond

+6

请注意,这只会删除**下一级别的依赖关系,但**不会**这些依赖关系的依赖关系。 – tamakisquare

3

和良好的措施了。考虑依赖与您安装的其他软件包相交的场景。每次新安装时,最好将其冻结为一个requirements.txt文件,并比较以前版本的requirements.txt以手动删除依赖项。

0

您可能试过https://github.com/cls1991/pef。 它将删除其所有依赖关系的包。

+0

不幸的是pef只能在虚拟环境中工作。 – Bas

+0

这只是出于安全考虑,您可以破解代码,只需关闭保护代码即可。 – cls1991