2012-02-10 3 views
4

После использования virtualenv with pip off-and-on в течение нескольких дней я обнаружил, что версия PIP, которая используется после активации virtualenv, является глобальным PIP вместо PIP относительно этой среды; так что если вы не установите переменную среды оболочки export PIP_RESPECT_VIRTUALENV=true, pip установит любой новый пакет (например, pip install argparse) в глобальную область, а не только в virtualenv.Системный PIP вместо virtualenv PIP по умолчанию?

Я ожидал бы, что PIP будет установлен на virtualenv по умолчанию, если этот virtualenv активирован.

Есть ли повод для этого не работает таким образом по умолчанию?

См. Пояснения here за то, как PIP_RESPECT_VIRTUALENV работ.

+0

FWIW: В virtualenvs я использую иметь свою собственную копию пип, которая устанавливает в этом virtualenv. – delnan

+0

@ delnan Как они получают свою собственную копию пипса? – bitcycle

+1

Последние версии (1.4 onward) of virtualenv должны автоматически устанавливать per env copy pip. Какую версию virtualenv вы используете? – philofinfinitejest

ответ

3

Это не первый раз, когда я вижу, что кто-то сообщил об одной и той же проблеме. Я не знаю, что происходит, но некоторые люди препятствуют использованию o source /path/to/venv/bin/activate, потому что это может испортить ваш $PATH.

Существует способ, по которому вы всегда будете уважать свой виртуальный: не полагайтесь на $PATH. Использование:

/path/to/venv/bin/pip install MYPACKAGE 

Было бы неплохо узнать, что с тобой происходит, и поделиться своим решением с другими. Между тем, вполне возможно использовать абсолютный путь к pip.

3

При создании virtualenv, то activate файл жёстко переменная VIRTUAL_ENV к месту, в котором вы первый созданный корневой каталог. Затем эта переменная экспортируется при source <your-venv>/bin/activate.

Следовательно, если вы перемещаете каталог virtualenv после его создания, путь к жесткому файлу будет неправильным.

Просто откройте <your-venv>/bin/activate в текстовом редакторе и убедитесь, что VIRTUAL_ENV устанавливается на новый путь директории virtualenv:

VIRTUAL_ENV="/Full/path/to/<your-venv>" 
export VIRTUAL_ENV 

перед запуском source <your-venv>/bin/activate снова.

Тогда, конечно, вы можете проверить версию pip с which pip, который должен производить:

/Full/path/to/<your-venv>/bin/pip 

, а не /usr/bin/pip или /bin/pip т.д.

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