Я создаю и активирую virtualenv (venv), используя встроенный способ Python 3.3:
$ 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
Эти команды успешно завершены. В этот момент я проверяю свой 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.
Идя немного дальше, я открываю 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, если это имеет значение.