Ответ
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
гарантирует, что у всех разработчиков и на сервере будет одинаковый набор пакетов. - Единый инструмент: Объединяет функциональность нескольких утилит в одном удобном интерфейсе.