Что такое Poetry и для чего он используется в Python-проектах

Ответ

Poetry — это современный инструмент для управления зависимостями и пакетами в Python, который призван унифицировать и упростить процессы, ранее требовавшие использования pip, virtualenv, setuptools и файла requirements.txt.

Основная цель Poetry — обеспечить детерминированность сборок и упростить управление проектом на всех его этапах.

Ключевые возможности:

  • Декларативное управление зависимостями: Все зависимости проекта и его метаданные (имя, версия, авторы) описываются в одном файле pyproject.toml.
  • Изоляция окружений: Poetry автоматически создает и управляет виртуальными окружениями для каждого проекта, гарантируя отсутствие конфликтов между зависимостями разных проектов.
  • Детерминированные сборки: Файл poetry.lock фиксирует точные версии всех зависимостей (включая транзитивные), что гарантирует, что проект будет работать одинаково на любой машине.
  • Сборка и публикация: Встроенные команды для сборки проекта в дистрибутивы (wheel, sdist) и их публикации на PyPI.

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

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

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

# Установить все зависимости из poetry.lock
poetry install

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

Ответ 18+ 🔞

Да ты посмотри, что эти умники придумали! Сидят, блядь, в своих питонячих норах, и им всё мало: то pip не тот, то virtualenv кривой, то в requirements.txt чёрт ногу сломит. Ну и наваяли они, суки, Poetry — этакую палочку-выручалочку, которая должна всю эту пиздобратию в кучу собрать и порядок навести.

По замыслу, конечно, охуенно: один файлик pyproject.toml, и в нём всё — и как проект зовут, и кто его родил, и чем он питается (то бишь, какие библиотеки жрёт). А главное — детерминизм, ёпта! Чтобы у тебя, у меня и у того чувака из Омска проект вставал одинаково, а не как обычно: «А у меня работает!».

Что эта мартышлюшка умеет:

  • Всё в одном флаконе: Не нужно бегать между pip, venv и прочим. Всё описал в toml — и пошла писать губерния.
  • Сама по себе: Виртуальное окружение создаст сама, в него сама всё поставит. Ты только команды ей подавай. Красота, блядь.
  • Замок на версии: Создаёт файл poetry.lock, где намертво, как влитой, прописано, какая именно версия каждой библиотеки (и библиотек этих библиотек!) должна стоять. Никаких «а сегодня numpy обновился и всё сломал».
  • Упаковать и выложить: Собрал проект в красивый пакет — и на PyPI его, родимого, одним махом. Не надо эти setup.py с тремя высшими образованиями читать.

Как с этой хуйней работать, на примере:

# Создаём новый проект. Poetry нагенерит папок, файлов — красота.
poetry new my-awesome-project
cd my-awesome-project

# Нужна библиотека? Проще пареной репы. Добавит и в конфиг, и в лок-файл.
poetry add requests

# Ставим всё, что насоздавали и наaddedли. Poetry сама окружение поднимет и натянет зависимости.
poetry install

# А чтобы запустить свой скрипт в этом самом окружении — не надо активировать, блядь, вручную.
poetry run python my_awesome_project/main.py

Вот и вся магия. Сначала, конечно, пиздец как непривычно, кажется, что они тут нагородили. Но потом втягиваешься и понимаешь — а ведь удобно, ёпта. Не зря же старались.