Подтвердить что ты не робот

Зачем распространять и устанавливать 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

Теперь я хочу установить дистрибутив и пипс, поэтому загружаю скрипты установки и запускаю их:

(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, если это имеет значение.

4b9b3361

Ответ 1

У меня есть ощущение, что в пакетах Ubuntu python есть или что-то распространять... но я не отслеживал его (и я не уверен, что мне это интересно).

По какой-то причине переменная среды VIRTUAL_ENV должна быть установлена ​​в корневой папке virtualenv для распространения, а pip для правильной установки.

Этот смысл, принятый из образца кода Vinay Sajip в документах Python 3, устанавливает указанную переменную; оба дистрибутива и pip будут правильно установлены при его использовании.

Ответ 2

Это в документах python.

'/usr/local' по умолчанию exec_prefix. Прочтите venv docs, чтобы узнать, как изменить поведение по умолчанию. Там даже пример, который показывает, как сделать venv.EnvBuilder, который устанавливает дистрибутив и пипс для вас.

если вы найдете распространение документов, сообщите мне, -)

Ответ 3

У меня была та же проблема. В файле activate script мне нужно добавить первую строку (курсив после #!...):

 unset PYTHON_PATH