Виртуальные окружения

virtualenv является инструментом для создания изолированных сред Python. Эта программа создает папку, которая содержит все необходимые исполняемые файлы и зависимости, необходимые для вашего проекта Python.

Зачем они нужны?

Представим следующий сценарий, где у вас есть два проекта: проект А и проект Б, которые оба имеют зависимость от одной и той же библиотеки – проект В. Проблема становится явной, когда мы начинаем запрашивать разные версии проекта В. Может быть так, что проект А запрашивает версию 1.0.0, в то время как проект Б запрашивает более новую версию 2.0.0, к примеру.

Это большая проблема Python, поскольку он не может различать версии в каталоге с установленными библиотеками. Так что обе версии 1.0.0 и 2.0.0 будут находиться с тем же именем в одном каталоге. 

И так как проекты хранятся в соответствии с их названиями, то нет различий между версиями. Таким образом, проекты А и Б должны будут использовать одну и ту же версию, что во многих случаях неприемлемо.

Что такое виртуальная среда?

Задача виртуальной среды  – создание изолированной среды исполнения для проектов на Python.

Это значит, что каждый проект может иметь свои собственные зависимости, не обращая внимания на то, какие зависимости у другого проекта.

Итак, в нашем небольшом примере вверху, нам просто нужно создать раздельную виртуальную среду для проектов А и Б. Каждая среда, в свою очередь, сможет зависеть от любой версии проекта В, независимо друг от друга.

Пример создания

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

$ python3 -m venv env

Эта команда создаст каталог под названием «env» в папке проекта. В ней будут расположены следующие подпапки:

  • bin – файлы, которые взаимодействуют с виртуальной средой;
  • lib – копия версии Python вместе с папкой «site-packages», в которой установлена каждая зависимость.

Нужны нам сейчас скрипты activate в папке bin. Эти скрипты используются для настройки вашей консоли для того, чтобы по-умолчанию использовалась именно новая виртуальная среда, а не библиотеки Python из всей системы. Чтобы использовать пакеты из среды в изоляции, вам нужно «активировать» их. Чтобы сделать это, выполните в папке проекта:

$ source env/bin/activate

Если вы не используете никаких скриптов для изменения внешнего вида консоли, то приглашение вашей консоли должно измениться на:

(env) $

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

(env) $ deactivate

Внутри среды вы можете, к примеру, устанавливать пакеты из pip, не опасаясь того, что в вашей системе, или других ваших проектах что-то изменится.

Подробнее о настройке и использовании виртуальных окружений можно почитать тут.