February 5, 2021

Как подружиться с виртуальным окружением 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 каждый раз осуществлять  не нужно, достаточно перейти в папку с виртуальными окружениями  (конечно, если ее еще нет, то сначала создать) и пройти этапы 5-7.

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

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

Обратите  внимание на тот факт, что первый путь до интерпретатора 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 в неизменном и, соответственно, рабочем состоянии.  А с какими проблемами при работе с виртуальными окружениями  сталкивались вы? Делитесь в комментариях.