Зачем распространять и устанавливать pip на мой virtualenv./local/bin?
Я создаю и активирую 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
Теперь я хочу установить дистрибутив и 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 / activ и обнаружив, что env / bin добавляется к системному пути, а env / local / bin - нет. Это объясняет поведение, которое я вижу. Я могу обойти эту проблему, отредактировав env / bin / activ для добавления каталога 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 на случай, если что-то изменится.
3 ответа
У меня есть ощущение, что есть ошибка в пакетах Python Ubuntu или где-то распространять... но я не отследил ее (и я не уверен, что мне все равно).
По какой-то причине переменная окружения VIRTUAL_ENV должна быть установлена в корне virtualenv для правильного распределения и pip.
Эта суть, взятая из примера кода Vinay Sajip в документации по Python 3, устанавливает указанную переменную; оба дистрибутива и pip будут правильно установлены при его использовании.
Это в документации по питону.
"/usr/local" является exec_prefix по умолчанию. Прочтите документацию по venv, чтобы узнать, как изменить поведение по умолчанию. Там даже есть пример, который показывает, как сделать venv.EnvBuilder
который устанавливает распространять и пип для вас.
если вы найдете распространяемые документы, пожалуйста, дайте мне знать;-)
У меня такая же проблема. В activate
файл сценария, который мне нужно добавить в качестве первой строки (конечно после #!...
):
unset PYTHON_PATH