Пожалуй, каждый программист либо уже, либо в будущем столкнется с проблемой совместимости библиотек на Python. Для ее решения придуман механизм виртуальных окружений, работа с которыми представляет трудность для начинающих и даже некоторых опытных кодеров. Предлагаю разобраться с данной темой и расставить все по полочкам раз и навсегда.
Если вы минималист
Можно установить библиотеку virtualenv в базовую сборку Python. Затем посредством данного инструмента создавать и активировать виртуальные окружения. Фактически это подразумевает копирование базовых компонентов Python в отдельную папку и настройку среды для поддержки дальнейшей работы только с их использованием. Итак, проделаем эти шаги:
- pip install virtualenv - установка virtualenv;
- mkdir new_project - создание папки с именем new_project;
- cd new_project - переход в папку;
- virtualenv new_project_env - создание виртуальной среды с именем new_project_env в папке new_project;
- source new_project_env/bin/activate (или new_project_env\Scripts\activate - в Windows) - активация виртуальной среды;
- работа с проектом;
- deactivate - деактивация виртуальной среды и завершение работы с ней.
Первые 4 шага требуются только в момент первоначальной настройки, а последующая работа с проектом ограничивается активацией (не забудьте указать путь до activate в шаге 5) и деактивацией среды.
Другим вариантом работы является создание разных виртуальных окружений в одной папке (не той, в которой создался новый проект). Это удобно, если вы хотите разделить одно виртуальное окружение между несколькими проектами. Отличием данного варианта будет то, что шаг 2 каждый раз осуществлять не нужно, достаточно перейти в папку с виртуальными окружениями (конечно, если ее еще нет, то сначала создать) и пройти этапы 4-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 в неизменном и, соответственно, рабочем состоянии. А с какими проблемами при работе с виртуальными окружениями сталкивались вы? Делитесь в комментариях.