Ответ
Poetry — это инструмент для Python, который унифицирует управление зависимостями, сборку пакетов и работу с виртуальными окружениями. Он призван заменить связку pip, venv, requirements.txt и setup.py единым и предсказуемым рабочим процессом.
Ключевые задачи, которые решает Poetry:
-
Декларативное управление зависимостями:
- Все зависимости проекта (основные и для разработки) объявляются в одном файле —
pyproject.toml. - Это заменяет
requirements.txtиdev-requirements.txt.
- Все зависимости проекта (основные и для разработки) объявляются в одном файле —
-
Детерминированная установка:
- Poetry создает файл
poetry.lock, который фиксирует точные версии всех зависимостей и их транзитивных зависимостей. - Это гарантирует, что окружение будет идентичным на любой машине, решая проблему "у меня работает, а у тебя нет".
- Poetry создает файл
-
Изоляция окружения:
- Автоматически создает и управляет виртуальным окружением для проекта, избавляя от необходимости вручную активировать
venv.
- Автоматически создает и управляет виртуальным окружением для проекта, избавляя от необходимости вручную активировать
-
Сборка и публикация пакетов:
- Позволяет легко собирать проект в форматы
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гарантирует, что у всех разработчиков и на сервере будет одинаковый набор пакетов. - Единый инструмент: Объединяет функциональность нескольких утилит в одном удобном интерфейсе.