2013-03-12 4 views
25

создать и активировать virtualenv (venv) с использованием Python 3.3 встроенный в способ сделать это:Зачем распространять и устанавливать pip на мой файл ./local/bin?

$ 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 

Эти команды полные SucceS sfully. В этот момент я проверяю свой venv, чтобы найти другой каталог под названием «local», которого раньше не было. окр/местный/бен содержит мой easy_install и пипсы исполняемых файлов, и они все еще псевдонимы к существующей моей системе easy_install и пипу:

(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/активировать, чтобы найти, что env/bin добавлен к системному пути, но 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 в случае, если это имеет значение.

+0

Я думал, что virtualenv должен был содержать 'pip' /' easy_install' уже? – MattDMo

+0

Нечетные. Я использую личную сборку Python 3.3 на Debian и распространяю/pip install в 'env/bin' для меня. Является ли ваша копия 3.3 из репозитория Ubuntu?Если да, попробуйте создать локальную копию и посмотреть, работает ли она правильно. – eryksun

+4

@MattDMo Я считаю, что pip и easy_install включены, когда вы используете команду 'virtualenv', но это, похоже, не относится к модулю venv модуля Python 3.3, судя по документам. @eryksun Это действительно версия Ubuntu Python 3.3. Я попытаюсь построить локально и отчитаться. –

ответ

2

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

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

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

+0

Подтверждено: установка VIRTUAL_ENV в корневой каталог virtualenv приведет к тому, что pip и дистрибутив будут установлены правильно. Я тестировал это на Ubuntu 13.04. Благодаря! –

0

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

unset PYTHON_PATH 
+3

Если вы можете расширить это, в чем проблема и почему ваше решение работает, это будет лучше. –

+0

У меня такая же ошибка .. но когда я добавлю это в начало этого файла, это решит мою проблему ... Попробуйте .. – WBAR

+1

Это не работает для меня. Также мой env/bin/activate не имеет #! как его первая строка. Как я упоминал в своем комментарии выше, у меня есть своя собственная работа, редактируя env/bin/activate, но я пытаюсь определить, почему требуется обход. –

1

Это в питона документации.

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

если вы найдете распространять документы, пожалуйста, дайте мне знать ;-)

+0

Хорошая информация, спасибо. Когда мой venv активирован, 'sys.prefix' и' sys.exec_prefix' оба указывают на корень venv. Но я не вижу, где в документах объясняется, как заставить «pip» или «easy_install» работать с venv. В частности, я смотрю в первом разделе «Примечание» в документах venv, который, как мне кажется, говорит мне, что все должно работать только с учетом моих действий выше. В частности: «Конечно, вам нужно сначала установить их в venv: это можно сделать, запустив файл distribute_setup.py с включенным venv, а затем запустив easy_install pip». Есть идеи? –

Смежные вопросы