![](/img/trans.png)
[英]Confusing Python install in user local (virtualenv, pip, distribute)
[英]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_install
和pip
能夠使用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.