2011-10-27 115 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