2013-03-12 33 views
25

我創建並激活的virtualenv(VENV)使用Python 3.3的做它的內置方式:爲什麼分發和點安裝到我的virtualenv的./local/bin?

$ python3.3 -m venv env 
$ source env/bin/activate 

此時python是我的virtualenv蟒蛇,這是我想到:

(env) $ which python 
/my_home_directory/env/bin/python 

現在我想安裝分發和點子,於是我下載安裝腳本並運行它們:

(env)$ wget http://python-distribute.org/distribute_setup.py 
(env)$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py 
(env)$ python distribute_setup.py 
(env)$ python get-pip.py 

這些命令完成更迭sfully。在這一點上,我檢查我的venv找到另一個名爲「本地」的目錄,這是以前沒有的。 ENV/local/bin目錄包含了我的easy_install和點子的可執行文件,並且他們還在化名爲我係統現有的easy_install和點子:

(env)$ ls env 
bin include lib local pyvenv.cfg 
(env)$ ls env/bin 
activate pydoc python python3 python3.3 
(env)$ ls env/local/bin 
easy_install easy_install-3.3 pip pip-3.3 
(env)$ which easy_install 
/usr/bin/easy_install 
(env)$ which pip 
/usr/bin/pip 

我相信這是在Python 2.x的行爲出發。在這一點上,我預計easy_installpip將使用virtualenv的副本,並使用它們來安裝雞蛋將把它們放在virtualenv。

走得更遠,我打開env/bin/activate來發現env/bin是系統路徑的前綴,但是env/local/bin不是。這解釋了我所看到的行爲。

_OLD_VIRTUAL_PATH="$PATH" 
PATH="$VIRTUAL_ENV/bin:$PATH" 
PATH="$VIRTUAL_ENV/local/bin:$PATH" # my new line 
export PATH 

那麼,什麼是怎麼回事:我可以通過編輯ENV /斌/激活的ENV /本地/ bin目錄添加到路徑,像解決這個問題呢?這是一個錯誤,還是我錯過了什麼?

我在Ubuntu 12.10的情況下,有所作爲。

+0

我以爲virtualenv應該包含'pip' /'easy_install'了嗎? – MattDMo 2013-03-12 20:41:03

+0

奇怪。我在Debian上使用Python 3.3的個人版本,並且在'env/bin'中爲我分發/ pip install。你是否從Ubuntu存儲庫獲得3.3版本的副本?如果是,請嘗試構建本地副本並查看其是否正常工作。 – eryksun 2013-03-13 08:38:21

+4

@MattDMo我相信當您使用'virtualenv'命令時,pip和easy_install會被包含在內,但從文檔來看,Python 3.3的venv模塊似乎並不是這樣。 @eryksun這確實是Ubuntu的Python 3.3版本。我會嘗試在本地建設並回報。 – 2013-03-13 13:19:20

回答

2

我有一種感覺,有一個在Ubuntu的Python包中的錯誤或分發的地方......但我還沒有跟蹤它(和我」我不知道我在乎)。

無論出於何種原因,VIRTUAL_ENV環境變量需要設置爲virtualenv的根目錄才能正確安裝。

This gist通過Vinay Sajip在Python 3文檔中的代碼示例設置所述變量;分發和點將在使用時正確安裝。

+0

確認:將VIRTUAL_ENV設置爲virtualenv的根將導致點和分發被正確安裝。我已經在Ubuntu 13.04上測試過了。謝謝! – 2013-08-21 13:25:42

0

我有同樣的問題。 在activate腳本文件,我需要(#!...五言後)爲第一行補充:

unset PYTHON_PATH 
+3

如果您可以將此擴展到問題的原因以及解決方案的工作原理,那會更好。 – 2013-03-20 16:10:45

+0

我得到了同樣的錯誤..但是當我在這個文件的頂部添加這個解決了我的問題...試試吧.. – WBAR 2013-03-21 09:19:55

+1

這對我不起作用。另外我的env/bin/activate沒有#!作爲其第一行。正如我在上面的評論中提到的,我通過編輯env/bin/activate有自己的解決方法,但我試圖確定爲什麼解決方法是必要的。 – 2013-03-21 17:47:53

1

它在Python文檔。

'/ usr/local'是默認的exec_prefix。請閱讀venv docs瞭解如何更改默認行爲。甚至有一個例子說明如何製作一個venv.EnvBuilder,它可以爲你安裝發行版和點子。

如果發現發佈文檔,請讓我知道;-)

+0

良好的信息,謝謝。當我的venv被激活時,'sys.prefix'和'sys.exec_prefix'都指向venv的根目錄。但我沒有看到文檔中的位置,它解釋瞭如何使用venv來運行'pip'或'easy_install'。具體來說,我正在看venv文檔的第一個「註釋」部分,這似乎告訴我,根據上面的重現步驟,事情應該可以正常工作。特別是:「當然,你需要先將它們安裝到venv中:這可以通過運行distribute_setup.py來激活venv,然後運行easy_install pip來完成。」任何想法? – 2013-03-22 18:08:21

相關問題