Управление окружениями Python в 2022

Если вы работаете с Python, то вы знаете о обилии инструментов по управлению окружениями. Вот некоторые из них: pip, venv, virtualenv, pyenv, pipenv, micropipenv, pip-tools, conda, miniconda, mamba, micromamba, poetry, hatch, pdm, pyflow. Так что же выбрать для себя? В этой статье мы дадим вам некоторый гайд, который поможет вам определиться в выборе.

Если вы не уверены, то используйте Mambaforge

Не стоит быть религиозным в вопросе правильного управления окружениями. Если вам совершенно устраивают текущие инструменты, то придерживайтесь их. Тем не менее, с такими инструментами возникают трудности, а различия между ними все же есть, но разбираться в них не каждому хочется. Поэтому таким людям мы дадим “золотое правило”:

Установите mambaforge, используйте mamba для управления пакетами, применяйте environment.yml для прямых зависимостей.

Mambaforge — это что-то вроде той же самой “condf-forge” платформы, откуда мы и устанавливаем большинство пакетов, но совмещенная с mamba вместо conda. А мы уже говорили в нашей статье, что mamba превосходит в скорости conda. Она дает вам следующие преимущества:

  • минимальная установка Python (через mambaforge);
  • менеджер виртуальных окружений (mamba env);
  • пакетный менеджер (mamba install);
  • быстрое решение зависимостей (libmamba, которая намного быстрее, чем в conda);
  • большая экосистема пакетов (conda-forge);
  • кроссплатформенность (Linux/Mac/Windows);
  • поддержка различных архитектур (x86, ppc64le, aarch64, Apple M1).

Возможные возражения

Но постойте, я управляю зависимостями для моего образа Docker, поэтому из-за установки mambaforge размера образа сильно разбухнет.

Не разбухнет, если вы используете multi-stage builds.

Но постойте, я разработчик Python-библиотеки, которую я хочу распространять через PyPi, поэтому poetry гораздо лучше с этим справляется.

Это возражение обосновано. Если вы разрабатываете пакет для PyPi, тогда действительно вы захотите добавить что-то вроде poetry или hatch. Тогда возможно вам не нужны все эти преимущества, которые дает mambaforge. Тем не менее, можно всегда добавить poetry поверх mambaforge.

Лучшие практики conda

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

  • Устанавливайте все что нужно через conda install/mamba install.
  • Если и только если пакет нет в conda-forge (или другом канале), то вернитесь к использованию pip install. Это может привести к конфликтами зависимостей, но это редкий случай, так что не переживайте.
  • Когда работаете над Python-пакетом, используйте environments.yml для прямых зависимостей. Если у вас приложение, будьте строги к номерам версий, и менее строги, если у вас библиотека. также conda-lock вам в помощь.
  • Используйте канал conda-forge, не используйте defaults из-за лицензионных проблем. Miniforge/mambaforge так уже поднастроены. Вы также можете изменить канал по умолчанию в вашем ~/.condarc:
    channels:
        - conda-forge
    

Пошаговый рецепт для поиска наилучшего менеджера окружений

Мы предлагаем вам некий алгоритм для выбора своего менеджера окружений.

  • Python классный, но мне нужны внешние библиотеки? -> pip
  • pip классный, но мне нужно иметь несколько версий той же самой библиотеки? -> venv, virtualenv
  • virtualenv классный, но мне нужно иметь разные версии Python? -> pyenv
  • virtualenv и pyenv классные, могу ли получить оба? -> pyenv-virtualenv
  • Виртуальные среды классные, но могу ли я получить свои зависимости? -> pip freeze > requirements.txt
  • Выводить зависимости классно, но можно ли получить прямые зависимости и транзитивные (т.е. зависимости зависимостей) отдельно? -> pip-compile, conda-lock
  • Виртуальные среды классные, но могут ли они работать для раздельных проектов? -> pipenv
  • pipenv классный, но что я могу использовать для легковесного контейнера? -> micropipenv
  • pipenv классный, но я хотел бы сконцентрироваться на разработке приложения -> poetry
  • Все эти вещи классные, но в моем проекте есть не только Python -> conda
  • conda классная, но разрешение зависимостей слишком медленное -> mamba
  • conda и conda-forge реально классные, но они должны идти с предустановленными минимальными пакетами -> miniforge
  • miniforge классный, но я предпочитаю использовать mamba вместо conda -> mambaforge

Машинное обучение на Python

Код курса
PYML
Ближайшая дата курса
7 ноября, 2022
Длительность обучения
24 ак.часов
Стоимость обучения
45 000 руб.

Еще больше подробностей о работе с виртуальными окружениями вы узнаете на наших образовательных курсах в лицензированном учебном центре обучения и повышения квалификации руководителей и IT-специалистов (менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data) в Москве:

Добавить комментарий

Поиск по сайту