为什么分发和pip安装到我的virtualenv的./local/bin?

Fra*_*k T 25 python virtualenv python-3.x python-3.3 ubuntu-12.10

我使用Python 3.3的内置方式创建并激活virtualenv(venv):

$ python3.3 -m venv env
$ source env/bin/activate
Run Code Online (Sandbox Code Playgroud)

在这一点上python是我的virtualenv中的python,我期望:

(env) $ which python
/my_home_directory/env/bin/python
Run Code Online (Sandbox Code Playgroud)

现在我想安装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
Run Code Online (Sandbox Code Playgroud)

这些命令成功完成.在这一点上,我检查我的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
Run Code Online (Sandbox Code Playgroud)

我相信这与Python 2.x的行为背道而驰.在这一点上,我期望easy_installpip使用virtualenv的副本,并使用它们来安装鸡蛋将把它们放在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
Run Code Online (Sandbox Code Playgroud)

那么,这里发生了什么?这是一个错误,还是我错过了什么?

我正在使用Ubuntu 12.10,以防万一.

Sam*_*ain 2

我有一种感觉,Ubuntu 的 python 软件包中存在错误,或者分布在某个地方\xe2\x80\xa6,但我还没有找到它(而且我不确定我是否关心)。

\n\n

无论出于何种原因,需要将 VIRTUAL_ENV 环境变量设置为 virtualenv 的根目录,以便正确安装 distribution 和 pip。

\n\n

这个要点取自 Python 3 文档中 Vinay Sajip 的代码示例,设置所述变量;使用时,distribute 和 pip 都会正确安装。

\n