2011-03-04 63 views
32

我想卸載我的超級用戶環境中的所有django軟件包,以確保我所有的webapp依賴項都安裝到我的virtualenv。旁路確認提示pip卸載

sudo su 
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall 

但pip想要確認每個軟件包的卸載,似乎並沒有一個用於點的-y選項。有沒有更好的方法來卸載一批python模塊? rm -rf .../site-packages/是否正確?有沒有easy_install的選擇?

另外,倒不如強制PIP安裝所有依賴於virtualenv中,而不是依賴於系統的Python模塊,以滿足這些依賴關係,例如pip --upgrade install,但強制甚至舊版版本被安裝以覆蓋任何系統模塊。我嘗試激活我的virtualenv然後pip install --upgrade -r requirements.txt,似乎確實安裝了依賴關係,即使那些存在於我的系統路徑中,但我不能確定是否因爲我的系統模塊是舊的。並且man pip似乎不能保證這種行爲(即安裝相同的版本的包已存在於系統站點包中)。

回答

1

另外,倒不如強制PIP安裝所有依賴於virtualenv中,而不是依賴於系統的Python模塊,以滿足這些依賴關係,

是。不要用內置的系統安裝軟件包搞砸。許多系統軟件包,尤其是OS X(甚至debian和衍生品種)都依賴於它們。

pip - 升級安裝,但強制安裝甚至同樣舊的版本來覆蓋任何系統模塊。

如果venv中已經安裝了幾個已安裝在系統包中的軟件包,尤其是它們的版本不同時,這應該不是什麼大問題。這就是virtualenv的全部觀點。

我嘗試激活我的virtualenv然後點子安裝--upgrade -r requirements.txt和似乎並安裝依賴,即使是那些存在於我的系統路徑,但我不能肯定,如果這是因爲我的系統模塊是舊的。而男人PIP似乎並不保證這種行爲(即安裝該系統中已有站點包存在一個包的版本相同)。

不,它不會在主設備上,除非你已經使用了--no-site-packages標誌來創建它,或所需的和現在的版本是不同的安裝包已經有..

1

拉克什曼·普拉薩德是正確的,pip --upgrade和/或virtualenv --no-site-packages是要走的路。卸載全系統的Python模塊是壞的。

pip的--upgrade選項會在虛擬環境中安裝所需的模塊,即使它們已經存在於系統環境中,即使所需版本或最新可用版本與系統版本相同。

pip --upgrade install 

,並使用創建虛擬環境時,--no-站點包選項確保缺少的依賴不可能被丟失模塊的系統路徑的存在掩蓋。這有助於在將模塊從一個包遷移到另一個包的過程中暴露出問題。 pinax.apps.groups - > django-groups,尤其是在django中加載templatetags語句時,它會搜索templatetags目錄的所有可用模塊以及其中的標記定義。

56

皮普不包括--yes選項(如PIP的1.3.1版)。

解決方法:管是對它!

$ sudo ls # enter pw so not prompted again 
$ /usr/bin/yes | sudo pip uninstall pymongo 
+1

啊,多麼簡單。感謝unix程序提醒。 「是」非常有用。 – hobs 2013-05-25 00:02:01

+0

但我不認爲這會工作(太膽怯,今天在我的系統上嘗試它)。 '是| sudo pip freeze | grep -E'^ django-'| xargs pip -q uninstall',因爲'yes'es會被'pip freeze'而不是'xargs'參數/命令,'pip uninstall'所吞噬。 – hobs 2013-05-25 00:10:21

+3

'pip freeze> all_to_uninstall.txt' 'yes | pip卸載-r all_to_uninstall.txt' – Nick 2014-11-14 15:42:57

60

開始PIP版本7.1.2,您可以運行pip uninstall -y <python package>

+2

直截了當的答案,謝謝! – 2016-01-29 02:45:00