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

Что такое virtualenv, и почему я должен использовать его?

Я пытаюсь установить пакет Python с помощью этой команды

pip install <name of package>

Я получаю ошибки разрешения, и я не уверен, почему. Я мог запустить его с помощью sudo, но кто-то сказал мне, что это плохая идея, и вместо этого я должен использовать virtualenv.

Что такое virtualenv? Что он делает для меня?

4b9b3361

Ответ 1

A virtualenv - это легкая, автономная установка Python. Они предназначены для установки с минимумом суеты и "просто работать", не требуя обширной конфигурации или специализированных знаний.

В Python 3.3 или более поздней версии вы можете создать virtualenv следующим образом:

$ python3 -m venv ENV_DIR

Для Windows вы должны заменить python3 на полный путь к python.exe:

>C:\Python34\python.exe -m venv ENV_DIR

(Это типичная установка Python, ваша система может отличаться.)

В более старых версиях Python, включая Python 2, одна из следующих команд должна работать в большинстве случаев:

$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR

ENV_DIR должен быть несуществующим каталогом. В каталоге может быть любое имя, но чтобы эти инструкции были простыми, я предположим, что вы создали свой virtualenv в каталоге с именем venv (например, с python3 -m venv ./venv).

Чтобы работать в вашем виртуальном сервере, вы активируете его:

$ . ./venv/bin/activate
(venv)$ 

Или используйте это, если у вас есть система Windows:

$ venv\Scripts\activate

(venv) в приглашении оболочки позволяет узнать, какой виртуальный пользователь вы активировали, но вы можете отключить эту функцию, если вам это не нравится. Вы можете запускать все обычные команды Python, и они будут локальными для вашего virtualenv:

(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>> 

python запустит версию Python, которую вы установили в свой virtualenv, поэтому (например) вам не нужно набирать python3, чтобы получить Python 3. Находящийся на нем Python будет иметь доступ ко всем стандартные библиотечные модули и все пакеты, которые вы установили в virtualenv, но (по умолчанию) ни один из пакетов, установленных в общесистемном каталоге site-packages.

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

(venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$ 

pip также может анализировать этот формат и устанавливать его, и он будет устанавливать те же версии, даже если обновления были выпущены в то же время:

(venv)$ pip freeze >requirements.txt

(some-other-venv)$ pip install -r requirements.txt
[...]
(some-other-venv)$ python
>>> import requests
>>> import numpy as np
>>> 

Вы можете выйти из virtualenv, отключив его:

(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'

Вы можете создать столько виртуальных файлов, сколько захотите, и они не будут мешать друг другу и вашим системным пакетам. Virtualenv - это "просто" каталог с кучей бинарных файлов и скриптов под ним, поэтому вы можете удалить virtualenv так же, как вы удалите любую директорию (rm -r venv в Unix). Если virtualenv активируется, когда вы его удаляете, вы можете запутать свою оболочку, поэтому в этом случае, вероятно, хорошая идея deactivate.

Ответ 2

Иногда вам не предоставляются привилегии root, и вы можете не использовать sudo. Во многих других случаях не рекомендуется использовать sudo для установки пакетов, поскольку он может перезаписать некоторый пакет, который может использоваться некоторыми другими приложениями.

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

Таким образом, в основном это дает вам немного свободы, а также предотвращает повреждение (или изменение) корневой среды, которая может содержать множество старых функций старых приложений.

Установка довольно проста.