2012-02-10 107 views
4

使用virtualenv幾小時後關閉pip,我發現virtualenv激活後使用的PIP版本是全局PIP,而不是相對於該環境的PIP;這樣如果你沒有設置shell環境變量export PIP_RESPECT_VIRTUALENV=true,pip會將任何新的軟件包(例如pip install argparse)安裝到全局範圍,而不是隻安裝到virtualenv。默認情況下系統PIP而不是virtualenv PIP?

我希望PIP默認安裝到virtualenv,如果這個virtualenv被激活。

有它沒有背後是有原因的工作在默認情況下呀?

請參閱如何PIP_RESPECT_VIRTUALENV作品的解釋here

+0

FWIW:我使用的virtualenvs有自己的點子的副本安裝在該virtualenv。 – delnan 2012-02-10 21:48:28

+0

@delnan他們如何獲得他們自己的點子副本? – bitcycle 2012-02-10 21:50:59

+1

virtualenv的最新版本(1.4版以後)應該自動安裝pip的每個env副本。你使用的是什麼版本的virtualenv? – philofinfinitejest 2012-02-10 22:32:26

回答

3

這不是我第一次看到有人報告同樣的問題。我不知道發生了什麼,但有些人不鼓勵使用source /path/to/venv/bin/activate,因爲它會弄亂你的$PATH

有這樣一個點子總是會尊重你的virtualenv:不靠$PATH。使用:

/path/to/venv/bin/pip install MYPACKAGE 

這將是很好,找出發生了什麼事,並與他人分享您的解決方案。同時,使用pip的絕對路徑也可以。

3

當您創建的virtualenv中,activate文件會有限制變量VIRTUAL_ENV在您第一次創建的根目錄的位置。然後在您source <your-venv>/bin/activate時輸出此變量。

因此,如果在創建virtualenv目錄後移動virtualenv目錄,則硬編碼文件路徑將不正確。

在文本編輯器只需打開<your-venv>/bin/activate並確保VIRTUAL_ENV設爲您的virtualenv目錄的新路徑:

VIRTUAL_ENV="/Full/path/to/<your-venv>" 
export VIRTUAL_ENV 

再次運行source <your-venv>/bin/activate之前。

那麼你當然可以測試pipwhich pip版本應該產生:

/Full/path/to/<your-venv>/bin/pip 

而非/usr/bin/pip/bin/pip