2017-01-20 3 views
0

Я создал виртуальную среду Python, и активировать его, выполнив:Python - Виртуальная среда использует систему каталоги

[email protected] $ source ./venvs/deep-learning/bin/activate 

Который превращает строку в:

(deep-learning) [email protected] $ 

Теперь, когда я запустить python или попытаться установить его, система, похоже, игнорирует тот факт, что она находится в виртуальной среде и делает все в масштабах всей системы:

(deep-learning) [email protected] $ which pip 
/usr/local/bin/pip 

То же самое происходит, когда я пытаюсь установить новые пакеты, которые не входят в мою систему; он устанавливает их в системные файлы (т. е./usr/bin) вместо виртуальной среды.

Что случилось с моей виртуальной средой? Как заставить его игнорировать системные файлы и делать все внутри среды?


Я посмотрел на this вопросе, который говорит, чтобы использовать явный флаг при создании виртуальной среды, чтобы сделать его использовать локальные пакеты среды, но я использовал python-3.5 -m venv для создания виртуальной среды, и этот флаг будет удален в этой версии, поскольку теперь она является опцией по умолчанию.

Я также рассмотрел вопрос this и могу подтвердить, что переменная VIRTUAL_ENV установлена ​​правильно в файле виртуальной среды activate.

+0

Каков результат 'echo $ PATH'? активировать предполагается разместить двоичные файлы venv на передней панели PATH – jonatan

+0

@jonatan - Оказывается, потому что я установил venv без pip, команда 'pip' использовала систему. По-видимому, это заставляет его устанавливать пакеты в систему, несмотря на то, что они находятся в виртуальной среде. Я действительно не понимаю этого, но мне удалось решить это в моем ответе. – Myridium

+0

Возможный дубликат [virtualenv не включает pip] (http://stackoverflow.com/questions/34503686/virtualenv-does-not-include-pip) – holdenweb

ответ

0

Здесь была проблема:

Кажется, что если вы запустите pip на venv без локального pip установки, то он будет по умолчанию системы pip вне venv. Даже если вы активировали виртуальную среду, это, похоже, хочет установить пакеты в системе, а не в venv.

Здесь было решение:

  • Во-первых, я должен был установить виртуальную среду без пип-за a bug that has long remained unresolved.

  • Во-вторых, я установил pip в виртуальную среду согласно инструкции here. Однако для этого потребовалось использование некоторых временных папок, которые по какой-то причине у моего пользователя не было доступа. Так что это не удалось, и единственный способ заставить его работать - это стать root.

    1. sudo su
    2. activate ..../venvs/deep-learning/bin/activate активировать виртуальную среду.
    3. curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python в соответствии с приведенным выше ответом.

    Хотя which pip Теперь указано правильное pip (внутри venv) использовался, бег pip будет использовать одну систему! Дезактивация (deactivate) и реактивация вен решили это.

    Теперь мне потребовалось некоторое время, чтобы понять, что, установив это как root, я вызвал ошибки при попытке установить больше пакетов с использованием pip внутри виртуальной среды.

  • chown <user>:<group> -R ..../venvs/deep-learning/*

И это было. После этих шагов я мог бы активировать venv и правильно запустить pip. Он будет использовать pip внутри venv и устанавливать пакеты внутри venv.

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