Какие задачи решает Poetry в Python и в чем его преимущества

Ответ

Poetry — это инструмент для Python, который унифицирует управление зависимостями, сборку пакетов и работу с виртуальными окружениями. Он призван заменить связку pip, venv, requirements.txt и setup.py единым и предсказуемым рабочим процессом.

Ключевые задачи, которые решает Poetry:

  1. Декларативное управление зависимостями:

    • Все зависимости проекта (основные и для разработки) объявляются в одном файле — pyproject.toml.
    • Это заменяет requirements.txt и dev-requirements.txt.
  2. Детерминированная установка:

    • Poetry создает файл poetry.lock, который фиксирует точные версии всех зависимостей и их транзитивных зависимостей.
    • Это гарантирует, что окружение будет идентичным на любой машине, решая проблему "у меня работает, а у тебя нет".
  3. Изоляция окружения:

    • Автоматически создает и управляет виртуальным окружением для проекта, избавляя от необходимости вручную активировать venv.
  4. Сборка и публикация пакетов:

    • Позволяет легко собирать проект в форматы sdist и wheel и публиковать его на PyPI с помощью простых команд.

Пример рабочего процесса:

# 1. Создать новый проект
poetry new my-awesome-project
cd my-awesome-project

# 2. Добавить зависимость (например, requests)
# Poetry автоматически найдет подходящую версию и добавит ее в pyproject.toml и poetry.lock
poetry add requests

# 3. Установить все зависимости из lock-файла
poetry install

# 4. Запустить скрипт в виртуальном окружении проекта
poetry run python my_awesome_project/main.py

Основные преимущества перед pip + venv:

  • Надежное разрешение зависимостей: Poetry использует продвинутый алгоритм для разрешения конфликтов версий, в то время как pip может устанавливать несовместимые пакеты.
  • Воспроизводимость сборок: poetry.lock гарантирует, что у всех разработчиков и на сервере будет одинаковый набор пакетов.
  • Единый инструмент: Объединяет функциональность нескольких утилит в одном удобном интерфейсе.