Виртуальное окружение Python
17-03-2023Время чтения ~ 4 мин.Python 3051
Virtual Environment (виртуальное окружение) в Python - это инструмент, который позволяет создавать изолированные среды для работы с проектами на Python. Виртуальное окружение содержит свой собственный интерпретатор Python и набор библиотек, которые можно установить и использовать независимо от тех, которые установлены в глобальной системе. Это позволяет избежать конфликтов версий между пакетами и гарантирует, что приложение будет работать так, как задумано, независимо от конфигурации и установки Python на компьютере.
Необходимость такого механизма возникла из-за того, что Python устанавливается глобально в системе. Точно также глобально устанавливаются пакеты PIP, поэтому все модули будут доступны для всех python-программ. Это может вызывать проблемы совместимости, особенно для программ, которым требуются разные версии модулей.
Ещё одной причиной использования виртуального окружения будет тестирование сторонних модулей. Не секрет что очень многие сторонние модули для Python работают очень плохо или с ошибками. Поэтому разработчики обычно следят за чистотой рабочей среды Python, избегая ставить модули глобально.
Важный момент ещё в том, что установка модулей через PIP подразумевает формирование многочисленных связей: модуль может использовать другой модуль, тот в свою очередь ещё несколько.
Чтобы этого избежать, разработчиками Python был придуман механизм виртуального окружения.
Как работает виртуальное окружение Python
Идея очень проста. Вместо использования глобального Python, будет использоваться его локальная копия, которая располагается прямо в каталоге проекта. То есть все необходимые зависимости для запуска вашей программы будут здесь же.
Таким образом, перед тем, как запустить программу, нужно вначале запустить локальную среду Python, который, собственно, и будет выполнять программу.
В Python уже встроены все механизмы для работы с виртуальным окружением и они состоят из нескольких этапов:
- создание виртуального окружения
- его активация
- выполнение программы в его рамках
- деактивация виртуального окружения
Если виртуальное окружение не нужно, то его каталог можно просто удалить.
Создание и запуск виртуального окружения Python
Для создания окружения необходимо запустить консоль в каталоге вашего проекта и выполнить команду:
python -m venv myvenv
Здесь Python использует команду venv
, которая создаёт каталог myvenv
, в котором будут размещаться все необходимые файлы. Каталог может быть произвольным, чаще всего используют venv
, но это дело вкуса.
Перед запуском своей программы, необходимо активировать созданное окружение. Для этого нужно запустить здесь же в консоли команду:
myvenv\Scripts\activate
Это запустит файл activate.bat
, который в свою очередь настроит переменные среды на текущий интерпретатор Python, а также локальные pip-модули. В консоли появится подсказка, что-то вроде такого:
(myvenv) user@DESKTOP каталог
Теперь можно запустить свою программу:
python my_prog.py
Она будет выполняться в пределах своего окружения. После того, как программа выполнена, можно деактивировать виртуальное окружение командой:
myvenv\Scripts\deactivate
Либо просто закрыть окно консоли.
Теперь, предположим, ваша программа требует какие-то сторонние модули, которые вы хотите потестировать. Для этого активируем виртуальное окружение и в нём вводим команды для pip:
pip install НУЖНЫЙМОДУЛЬ
Всё как обычно, только в рамках своего окружения. PIP установит модуль локально и он никак не будет влиять на остальных.
Автоматический запуск виртуального окружения
Использование консоли не очень удобно, особенно если вы пишите программы в простом редакторе, вроде NPP, или Sublime Text. Для их запуска потребуется вначале запустить среду, а потом уже программу. Чтобы упростить это дело, можно использовать отдельный bat-файл, например run.bat
прямо в каталоге программы:
call myvenv\Scripts\activate.bat python my_prog.py
Такой вариант отлично годится для запуска готовой программы
Virtual Environment при разработке
Во время разработки программ, пользоваться виртуальным окружением может быть не очень удобным. Если у вас много программ, то придётся для каждой из них указывать свой интерпретатор Python (который в myvenv\Scripts
). Поэтому идеальный вариант, когда среда разработки сама понимает существование Virtual Environment текущего проекта и предлагает переключить интерпретатор на доступные (глобальный и локальный).
Так работает Visual Studio Code. Когда вы открываете каталог проекта, то VSCode высветит подсказку, где можно выбрать нужный интерпретатор Python.
После этого работать можно как обычно. Если требуется установить дополнительные модули, то сделать это можно здесь же в консоли VSCode.