Погружение в виртуальные среды: навигация по виртуальным средам Python

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

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

Конфликтующие зависимости

Представьте, что вы работаете над двумя проектами Python в одной системе. Проекту A требуется Django 3.1, а проекту B — Django 4.0. Оба проекта нуждаются в Pillow для обработки изображений, но каждому из них нужна своя версия. Вы обнаруживаете, что у вас становится все более непреодолимое количество противоречивых зависимостей; вы находитесь в «аду зависимости».

Чтобы решить проблему глобальных зависимостей, была введена концепция «виртуальной среды».

Виртуальные среды позволяют создавать отдельные изолированные среды для каждого создаваемого вами проекта Python и управлять ими.

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

Инструменты виртуальной среды

Существует ряд инструментов для создания виртуальных сред, включая, помимо прочего:

virtualenv

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

venv

  • Представлен как часть стандартной библиотеки Python, начиная с Python 3.3.
  • Предлагает простой интерфейс для создания виртуальных сред.

conda

  • conda от Anaconda — это менеджер среды, не зависящий от языка.
  • conda особенно полезен в области науки о данных.

В оставшейся части этой статьи мы сосредоточимся на venv (но, надеюсь, в будущем я доберусь и до conda).

Самый простой способ настроить виртуальную среду в Python — использовать встроенный модуль Python venv, и именно на нем мы сосредоточимся в этой статье.

Создание виртуальной среды

Перейдите в каталог (папку) вашего проекта; здесь вы хотите разместить свою виртуальную среду.

Выполните следующую команду:

Давайте посмотрим, что на самом деле происходит с помощью приведенной выше команды:

  • python3: Здесь указывается интерпретатор Python, который мы хотим использовать (в некоторых системах будут установлены как Python 2, так и Python 3, поэтому явно укажите, что python3 гарантирует, что вы вызываете нужный интерпретатор Python).
  • -m: это опция для интерпретатора Python. Оно означает «модуль» и указывает Python запускать модуль как скрипт; это означает, что вместо запуска сценария или входа в интерактивную оболочку Python вы указываете Python выполнить определенный модуль из стандартной библиотеки Python.
  • venv: Это тот самый модуль, который мы хотим запустить с помощью переключателя -m. venv создаст каталог, содержащий интерпретатор Python и стандартную библиотеку.
  • .my_environment: это имя каталога, в котором будет создана виртуальная среда.

Совет: Точка перед именем означает, что среда скрыта от простой команды ls, но вы можете увидеть ее в каталоге, используя ls -la. Примечание. Добавлять точку перед именем каталога не обязательно, но это принято в операционных системах UNIX.

Активация виртуальной среды

В каталоге вашего проекта активируйте вновь созданную виртуальную среду следующим образом:

Эта команда запустит команды из сценария «активировать» в каталоге «bin» «my_environment», тем самым активируя виртуальную среду.

После активации вы обнаружите, что в приглашении оболочки (%) слева от него в скобках указано имя вашей среды. Ваша виртуальная среда теперь активна.

Это означает, что когда вы устанавливаете любые пакеты Python, они будут ограничены только что созданной виртуальной средой.

Забыть об активации — очень распространенная ошибка при работе с виртуальными средами — не забудьте активировать!

Установка пакетов

После активации виртуальной среды вы можете использовать установщик пакетов, например pip, для установки пакетов/библиотек и т. д.

Эти пакеты будут доступны только в вашей виртуальной среде.

Вы можете использовать простой синтаксис для установки пакетов/библиотек с помощью pip.

Или вы можете быть более явным с синтаксисом:

Использование более сложного синтаксиса снижает потенциальную двусмысленность, особенно если вы работаете в более сложных средах.

Также очень полезно знать, какие пакеты вы установили в своей среде, и это невероятно легко сделать с помощью следующей простой команды:

Создание файла «requirements.txt»

Выше мы упоминали, что причина, по которой мы создаем эти среды, — предотвращение конфликтующих зависимостей. Часто проекты включают файл requirements.txt, в котором перечислены все зависимости для этого проекта.

Если вам нужно знать зависимости или вы хотите поделиться своим проектом на Github и т. д., рекомендуется создать файл require.txt.

Эта команда фиксирует точные версии каждого установленного пакета на момент его создания.

Вы также можете использовать этот текстовый файл для воссоздания среды, используя pip для установки всех пакетов, перечисленных в таком файле:

Деактивация виртуальной среды

Чтобы деактивировать виртуальную среду, вы просто:

Это вернет вас в глобальную среду Python.

Советы и рекомендации

После активации виртуальной среды вам следует выработать привычку обновлять pip и setuptools до последних версий.

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

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