2017-02-01 13 views
18

Я пытаюсь установить пакет Python с помощью этой командыЧто такое virtualenv, и зачем его использовать?

pip install <name of package> 

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

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

+0

Читать эту статью: http://flask.pocoo.org/docs/0.12/installation/#virtualenv –

ответ

23

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, одна из следующих команд должна работать в большинстве случаев ses:

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

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

Для работы в вашем virtualenv, вы активируете его:

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

Или использовать это, если у вас есть окна системы:

$ venv\Scripts\activate 

(venv) в приглашении оболочки позволяет узнать, какие virtualenv вас активированы, но вы можете отключить эту функцию, если вам это не нравится. Вы можете выполнять все обычные команды 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' 

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

1

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

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

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

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