我使用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的副本,使用它们安装鸡蛋将把它们放入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,以防这会有所不同.