Система PIP вместо virtualenv PIP по умолчанию? - PullRequest
4 голосов
/ 11 февраля 2012

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

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

Есть ли причина этого не , работающий таким образом по умолчанию?

См. Объяснение здесь о том, как PIP_RESPECT_VIRTUALENV работает.

Ответы [ 2 ]

3 голосов
/ 21 июля 2015

Когда вы создаете 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 и т. Д.

3 голосов
/ 11 февраля 2012

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

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

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

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

...