簡體   English   中英

為什么分發和pip安裝到我的virtualenv的./local/bin?

[英]Why do distribute and pip install to my virtualenv's ./local/bin?

我使用Python 3.3的內置方式創建並激活virtualenv(venv):

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

在這一點上, python是我的virtualenv中的python,我期望:

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

現在我想安裝distribute和pip,所以我下載了安裝腳本並運行它們:

(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

這些命令成功完成。 在這一點上,我檢查我的venv,找到另一個名為“local”的目錄,之前沒有。 env / local / bin包含我的easy_install和pip可執行文件,它們仍然是我系統現有的easy_install和pip的別名:

(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的副本,並使用它們來安裝egg會將它們放入virtualenv中。

再進一步,我打開env / bin / activate來發現env / bin被添加到系統路徑前面,但是env / local / bin不是。 這解釋了我所看到的行為。 我可以通過編輯env / bin / activate來解決這個問題,將env / local / bin目錄添加到路徑中,例如:

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

那么,這里發生了什么? 這是一個錯誤,還是我錯過了什么?

我正在使用Ubuntu 12.10,以防萬一。

我有一種感覺,Ubuntu的python包中有一個bug或者在某個地方分發......但是我沒有追蹤它(我不確定我在乎)。

無論出於何種原因,VIRTUAL_ENV環境變量需要設置virtualenv的root用於distribute和pip才能正確安裝。

從Vinay Sajip在Python 3文檔中的代碼示例中采用的這個要點設置了所述變量; 發布和pip都會在使用時正確安裝。

它在python文檔中。

'/ usr / local'是默認的exec_prefix 閱讀venv文檔以獲取有關如何更改默認行為的詳細信息。 這里甚至還有一個例子,展示了如何制作一個為你安裝發行和venv.EnvBuilder

如果您找到分發文檔,請告訴我;-)

我有同樣的問題。 activate腳本文件中,我需要添加第一行( #!...之后的cource):

 unset PYTHON_PATH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM