Найти тему
Властелин машин

Как подружиться с виртуальным окружением Python

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

Если вы минималист

Можно установить библиотеку virtualenv в базовую сборку Python. Затем посредством данного инструмента создавать и активировать виртуальные окружения. Фактически это подразумевает копирование базовых компонентов Python в отдельную папку и настройку среды для поддержки дальнейшей работы только с их использованием. Итак, проделаем эти шаги:

  1. pip install virtualenv - установка virtualenv;
  2. mkdir new_project - создание папки с именем new_project;
  3. cd new_project - переход в папку;
  4. virtualenv new_project_env - создание виртуальной среды с именем new_project_env в папке new_project;
  5. source new_project_env/bin/activate (или new_project_env\Scripts\activate - в Windows) - активация виртуальной среды;
  6. работа с проектом;
  7. deactivate - деактивация виртуальной среды и завершение работы с ней.

Первые 4 шага требуются только в момент первоначальной настройки, а последующая работа с проектом ограничивается активацией (не забудьте указать путь до activate в шаге 5) и деактивацией среды.

Другим вариантом работы является создание разных виртуальных окружений в одной папке (не той, в которой создался новый проект). Это удобно, если вы хотите разделить одно виртуальное окружение между несколькими проектами. Отличием данного варианта будет то, что шаг 2 каждый раз осуществлять не нужно, достаточно перейти в папку с виртуальными окружениями (конечно, если ее еще нет, то сначала создать) и пройти этапы 4-7.

Давайте убедимся, что после активации среды изменяется путь до используемого по умолчанию интерпретатора:

-2

which отображает полный путь к командам или сценариям. После активации среды адрес до интерпретатора и менеджера пакетов изменился, соответственно, любые новые модули будут устанавливаться и исполняться в виртуальном окружении. Для интереса выведем содержимое переменной окружения $Path, хранящей пути поиска файлов, до и после активации виртуального окружения Python:

-3

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


Если вы используете популярную сборку Anaconda

В этом случае в вашем распоряжении менеджер пакетов conda, с помощью которого можно создать, активировать и деактивировать виртуальное окружение.

Для создания задаем имя среды и предпочитаемую версию python.

conda create --name имя_среды python=3.8

Таким способом виртуальное окружение создается в отдельной папке с относительным адресом anaconda3/envs.

Также виртуальное окружение можно создать с использованием графического инструмента Anaconda Navigator (подробнее читай здесь).

Для активации и деактивации достаточно набрать

conda activate имя_среды

conda deactivate

Если вы используете средство управления виртуальными средами virtualenvwrapper

Для его добавления к базовой сборке следует набрать:

pip install virtualenvwrapper

Далее следует этап загрузки переменных и функций virtualenvwrapper, для чего запускаем сценарий virtualenvwrapper.sh (в Windows работает только в оболочке Git-Bash):

source virtualenvwrapper.sh

Для создания виртуальной среды можно воспользоваться командой:

mkvirtualenv --python=python3.8 имя_окружения

По умолчанию виртуальное окружение создается в подпапке .virtualenvs домашней директории. Активация происходит посредством следующей команды:

workon имя_окружения

а деактивация:

deactivate

Резюмируя отмечу, что для крупных проектов, предполагающих установку специфических библиотек, лучше создавать отдельные виртуальные окружения, в то время как ряд малых и схожих могут использовать общее окружение.
Большим преимуществом использования виртуальных окружений помимо решения проблем совместимости библиотек является поддержка базовой сборки Python в неизменном и, соответственно, рабочем состоянии. А с какими проблемами при работе с виртуальными окружениями сталкивались вы? Делитесь в комментариях.