2014-01-06 104 views
6

編輯#2找到解決方案;見下文。VirtualEnv/Pip嘗試全局安裝軟件包

我正在使用VirtualEnv在Flask中編寫一個小應用程序。這是我第一次做這件事,但這次和過去兩次我試過我遇到過同樣的問題。當我. flask/bin/activate並嘗試安裝一個軟件包 - 例如pip install flup時,它將繼續在全局安裝,而不是在VirtualEnv中安裝。奇怪的是,它只發生在我deactivate之後,並且它在那裏不一致。

要機智,我似乎能夠安裝我需要的一切,如果我做的這一切在一次,之後甚至偶爾我deactivate,但一定時間後,它只是停止工作並開始試圖安裝到我的全球Python site-packages。 (當然,它也會在這樣做的時候請求權限,在我明白髮生了什麼之前,我試圖用sudo來強制它,認爲我是不小心將它帶到了自己身上sudo virtualenv flask -ing什麼的,但是不是,它會全球化)

我沒有做任何有趣的事情,就像使用--system-site-packages參數一樣,並且在VirtualEnv配置開始之前我沒有改變任何東西。第一次發生時,我把它寫成了一種僥倖。現在它變得非常惱人,因爲我沒有心情卸載所有東西並每次重新安裝它,或者祈禱我會在引導腳本中考慮到我需要的一切。

我沒有包含任何錯誤消息,因爲它們不是(或似乎不是)特別有價值;它只是requirement already satisfied一遍又一遍地對我咆哮。

編輯#1我把這個問題稍微調了一下,但我仍然沒有解決方案。我在同一個目錄中創建了一個新的Flask項目,其中包括cd - 激活了它的VirtualEnv等,然後運行which pip。這是新的VirtualEnv的點子 - 正確的點子。我停用了,cd -ed我的原始項目,激活VirtualEnv,並運行which pip。它吐出了另一個項目 - 新的 - pip。我在rm -r - 新的測試項目,回到原來的,再次運行which pip,它吐出/usr/local/bin/pip。哦。好。

編輯#2:解決方案我可能沒有找到確切的原因,但我找到了解決方案。 bin/activatebin/pip腳本本身發生了某種變化,可能是因爲偶然在同一時間運行兩個VirtualEnvs(?)。也許這只是巧合,它以前從未發生過,它連續發生三次。不知道。

cat -ed activate果然,第42行,是

VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask2/flask" 

,而不是

VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask/flask" 

我改變了它,又跑到which pip,並得到正確的結果。嘗試安裝,得到了一個堆棧跟蹤,導致我bin/pip,並發現其shebang是錯誤的。把它改成正確的道路,一切都完美無瑕。

+1

在沒有sudo的情況下運行它時,它如何獲得安裝在全局python上的權限?還是在嘗試和失敗? –

+0

這是嘗試和失敗,但我不明白爲什麼它試圖擺在首位。 –

+2

只需運行virtualenv的pip及其完整路徑(即不要依賴於搜索可執行文件路徑),甚至不需要激活環境。它會做正確的事情。 –

回答

1

我有同樣的問題。對我而言,原因是我的藝術家在路上有空間。

將virtualenv移動到無空間路徑解決了問題。

0

如果您已將您的項目目錄重命名爲包含ENV - 虛擬環境目錄,請嘗試清除ENV目錄並重新創建virtualenv並將其激活並重新安裝pip依賴項。

TL-DR; 刪除虛擬環境,創建新環境,激活它並再次發出pip命令。

+0

你的意思是虛擬環境的名字中不應該有「env」嗎? 因爲我在虛擬環境中遇到了上面的錯誤,它的名稱中包含「env」。 (它也位於名稱中帶有「env」的目錄中。) –

相關問題