Виртуальные среды Python (англ. virtual enviroment, сокращенно venv или virtualenv) позволяют устанавливать пакеты Python в изолированном от остальной части вашей системы месте. Давайте посмотрим, как их использовать для вашей работы.
Существует множество причин, по которым виртуальные среды это хорошая идея. И именно поэтому мы вам о них рассказываем до того, как начнем устанавливать сторонние библиотеки. Итак, рассмотрим эти причины по порядку.
Вы можете возразить, что установка сторонних пакетов для всей системы очень эффективна. В конце концов, вам нужно установить пакет только один раз, и вы сможете использовать его в нескольких разных проектах Python, экономя драгоценное время и дисковое пространство. Однако в этом подходе есть проблема, которая может начать проявляться через несколько недель или месяцев.
Предположим, ваш проект, назовем его Проект А, написан на основе конкретной версии библиотеки X. В будущем вам может потребоваться обновить библиотеку X. Скажем, вам нужна последняя версия для другого начатого вами проекта под названием Проект Б. Вы обновляете библиотеку X до последней версии, и проект B работает нормально. Прекрасно, но после этого выясняется, что код Проекта А неисправен. При обновлении версий интерфейс может быть серьезным образом изменен.
Виртуальная среда решает эту проблему, изолируя ваш проект от других проектов и общесистемных пакетов. Вы устанавливаете пакеты внутри этой виртуальной среды специально для проекта, над которым работаете.
Виртуальные среды упрощают определение и установку пакетов, специфичных для вашего проекта. Используя файл require.txt, вы можете определить точные номера версий необходимых пакетов, чтобы ваш проект всегда работал с версией, протестированной с вашим кодом.
Если вы работаете на общем хосте, например, в университете или у провайдера веб-хостинга, вы не сможете устанавливать общесистемные пакеты, поскольку у вас нет для этого прав администратора. В этих местах виртуальная среда позволяет вам локально установить в свой проект все, что вы захотите.
Есть и другие варианты для изоляции вашего проекта:
Тем не менее, во многих случаях мы просто создаем небольшие проекты или одноразовые скрипты. Или, возможно, просто не хотим контейнеризировать свое приложение. В конце концов, это еще одна вещь, которую вам нужно выучить и понять. Какой бы ни была причина, виртуальные среды — отличный способ изолировать зависимости вашего проекта.
Существует несколько способов создания виртуальной среды в зависимости от используемой версии Python.
Прежде чем вы продолжите чтение, мы бы хотели указать вам на два других инструмента: Python Poetry
и Pipenv
. Оба эти инструмента сочетают в себе функциональность инструментов, которые вы собираетесь изучить: virtualenv и pip. Кроме того, они добавляют несколько дополнительных возможностей, и в первую очередь — возможность правильного разрешения зависимостей.
Если вы используете Python 3.4+, то модуль venv уже встроен в него.
python -m venv <directory>
Эта команда создает виртуальную среду в указанном каталоге и также копирует в него пакетный менеджер pip
. Если вы не решили, как назвать каталог: обычно по умолчанию используется название venv; это не дает никому усомнится, что там такое. Таким образом, команда в этом случае будет выглядеть вот так:
python -m venv venv
Чуть дальше в этой статье мы внимательно рассмотрим только что созданный каталог. Но сначала посмотрим, как активировать эту виртуальную среду.
Альтернативой, которая работает для любой версии Python, является использование пакета virtualenv
. Но для этого его надо сначала установить:
pip install virtualenv
После установки можно создать виртуальную среду с помощью следующей команды:
virtualenv [directory]
Способ активации виртуальной среды зависит от используемой вами ОС.
Чтобы активировать виртуальную среду в Windows, вам необходимо запустить скрипт, который устанавливается вместе с ней. Если вы создали свою виртуальную среду в каталоге с именем venv
, то команда будет выглядеть следующим образом:
# In cmd.exe venv\Scripts\activate.bat # In PowerShell venv\Scripts\Activate.ps1
В Linux и MacOS мы активируем виртуальную среду при помощи команды source
. Если вы создали свою виртуальную среду в каталоге myvenv
, то команда будет выглядеть так:
$ source myvenv/bin/activate
Вот и все! Мы готовы к работе! Теперь можно устанавливать пакеты при помощи пакетного менеджера pip
, но мы советуем вам продолжить чтение, чтобы лучше понять механизмы работы виртуальных сред.
При активации виртуальной среды изменяется переменная PATH
. В Linux и MacOS это можно увидеть, распечатав ее с помощью команды echo $PATH
. В Windows используется команда echo %PATH%
(в cmd.exe) или команда $Env:Path
(в PowerShell). В нашем случае под Windows это выглядит следующим образом:
C:\Users\erik\Dev\venv\Scripts;C:\Program Files\PowerShell\7;C:\Program Files\AdoptOpen....
Это длинный список, и мы показали только его начало. Как видите, каталог Scripts моей виртуальной среды помещен впереди всех других каталогов, фактически переопределяя все общесистемные программы Python.
Когда вы вводите команду, которая не может быть найдена в текущем рабочем каталоге, ваша ОС начинает просматривать все пути в переменной PATH
.
То же самое происходит и с Python. Когда вы импортируете библиотеку, Python просматривает PATH
на предмет расположения библиотеки. И вот тут-то и происходит наша магия с виртуальной средой: если виртуальная среда находится перед всеми остальными путями, то ОС будет искать сначала в ней, а потом уже обращаться к общесистемным каталогам, таким как /usr/bin
. Таким образом, все, что установлено в нашей виртуальной среде, будет найдено первым, и именно так мы можем переопределять общесистемные пакеты и инструменты.
Если заглянуть в каталог виртуальной среды, то под операционной системой Windows вы увидите примерно следующее:
. ├── Include ├── Lib │ └── site-packages ├── pyvenv.cfg └── Scripts ├── activate ├── activate.bat ├── Activate.ps1 ├── deactivate.bat ├── pip3.10.exe ├── pip3.exe ├── pip.exe ├── python.exe └── pythonw.exe
А под Linux и MacOS вот что:
Можно заметить, что:
python
и python3
(в Linux и MacOS), причем версия соответствует версии Python, в которой была создана виртуальная средаscripts
site-packages
pip
и pip3
и даже pip3.7
, так как на момент установки виртуальной среды у нас была версия Python 3.7.По окончании работы над проектом рекомендуется деактивировать его виртуальную среду. Деактивация означает выход из данной виртуальной среды. Без деактивации виртуальной среды весь остальной выполняемый вами Python-код, даже если он находится вне каталога проекта, также будет выполняться внутри этой виртуальной среды.
К счастью, деактивация виртуальной среды крайне проста. Просто введите команду deactivate
. Это работает одинаково во всех операционных системах.
Виртуальную среду можно полностью удалить, но как это сделать, зависит от того, что именно использовалось для ее создания. Рассмотрим наиболее распространенные варианты.
Если для создания виртуальной среды вы использовали команды virtualenv
или python -m venv
, как это было показано выше в данной статье, то какой-либо специальной команды для ее удаления не существует. При создании виртуальной среды вы задали каталог, в котором было создано данное окружение.
Если вы хотите удалить эту виртуальную среду, то сначала деактивируйте ее, а затем удалите ее каталог со всем его содержимым. В Unix-подобных системах и в Windows PowerShell это можно сделать следующим образом:
deactivate # Если ваша виртуальная среда находится в каталоге под названием 'venv': rm -r venv
Если для создания виртуальной среды вы использовали Pipenv
, то все гораздо проще. Для ее удаления можно воспользоваться следующей командой:
pipenv --rm
Только убедитесь, что вы находитесь в каталоге проекта. Другими словами, в каталоге, где находятся файлы Pipenv и Pipenv.lock. Таким образом pipenv
узнает, какое виртуальное окружение ему нужно удалить.
Если это не сработало, можно поступить немного грубее и удалить виртуальную среду вручную. Сначала спросите у pipenv
, где находится данная виртуальная среда, выполнив следующую команду:
pipenv --env /home/username/.local/share/virtualenvs/yourproject-IogVUtsM
Данная команда выведет путь к виртуальной среде и всем ее файлам, который будет выглядеть примерно так, как показано выше. Следующим шагом будет удаление всего этого каталога. И все, дело сделано.
Если вы создали виртуальную среду при помощи Poetry, то список доступных сред можно составить при помощи следующей команды:
poetry env list
Вы получите примерно такой список:
test-O3eWbxRl-py2.7 test-O3eWbxRl-py3.6 test-O3eWbxRl-py3.7 (Activated)
Удалить нужное окружение можно с помощью команды poetry env remove
. При этом необходимо указать точное имя среды из приведенного выше вывода, например:
poetry env remove test-O3eWbxRl-py3.7
Вы узнали, как создавать, активировать, деактивировать и удалять виртуальные среды. Мы также слегка заглянули за ширму, чтобы узнать, как работает виртуальная среда и для чего она нужна.
Теперь, когда вы знаете, как создавать виртуальные среды, вам необходимо научиться устанавливать в них пакеты. Для этого мы настоятельно рекомендуем вам познакомиться с Pipenv или Poetry. Эти инструменты объединяют управление виртуальной средой с правильным управлением пакетами и зависимостями.
Перевод статьи «Python venv: How To Create, Activate, Deactivate, And Delete».
При анализе данных часто требуется быстро найти абсолютное значение набора чисел. Для выполнения этой задачи…
Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…
Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…
В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…
В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…
При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…