Какой менеджер зависимостей рекомендуется использовать в Python-проектах?

Ответ

Для проектов на Python часто рекомендуется использовать Poetry — современный инструмент для управления зависимостями. Он объединяет управление пакетами, виртуальными окружениями и публикацией в одном инструменте, обеспечивая более надежное и воспроизводимое управление зависимостями.

Почему Poetry? Poetry помогает избежать проблем с конфликтами зависимостей и обеспечивает детерминированную установку пакетов благодаря файлу poetry.lock.

Пример pyproject.toml:

[tool.poetry]
name = "my_project"
version = "0.1.0"
description = "Awesome project"
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.25.1"
pandas = "^1.3.0"

[tool.poetry.dev-dependencies]
pytest = "^6.2.4"
black = "^21.7b0"

Основные преимущества Poetry:

  • Изоляция окружений: Автоматическое создание и управление виртуальными окружениями.
  • Детерминизм: Блокировка версий всех зависимостей через poetry.lock для воспроизводимых сборок.
  • Разделение зависимостей: Четкое разделение зависимостей для разработки (dev-dependencies) и продакшена.
  • Удобство публикации: Упрощенный процесс публикации пакетов в PyPI.

Альтернативы:

  • pip + venv (базовый подход)
  • pipenv (еще один инструмент для управления зависимостями и окружениями)

Ответ 18+ 🔞

Так, слушай, смотри, а то я тут подумал, блядь... Все эти твои проекты на Python, они же, сука, как карточный домик — один пакетик не туда поставил, и всё, пиздец, полдня ищешь, почему всё ебнулось.

Вот смотри, есть же нормальный инструмент, называется Poetry. Это не просто менеджер пакетов, это, блядь, целый комбайн, ёпта! Он за тебя и виртуальные окружения создаст, и зависимости разложит по полочкам, и даже на PyPI выложить поможет, если вдруг приспичит. Одна хуйня, но сразу на все случаи жизни.

А нахуя он вообще нужен, этот Poetry? А затем, чувак, чтобы у тебя не было вот этой классической хуйни: «У меня на компе работает, а у тебя — нет». Он создаёт файлик poetry.lock, где намертво, как в гробу, заколачивает версии ВСЕХ библиотек, до самых последних ихних зависимостей. Воспроизводимость, блядь, на уровне бога. Поставил — и ни один пидарас не вылезет с несовместимой версией.

Смотри, как pyproject.toml выглядит, это пиздец просто:

[tool.poetry]
name = "my_project"
version = "0.1.0"
description = "Awesome project"
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.25.1"
pandas = "^1.3.0"

[tool.poetry.dev-dependencies]
pytest = "^6.2.4"
black = "^21.7b0"

И в чём конкретно кайф, спросишь?

  • Окружение на автомате: Не надо ебаться с venv и activate. Сказал poetry install — и он сам всё сделал, в рот меня чих-пых.
  • Порядок в консерватории: poetry.lock — это святое. Собрал один раз, закоммитил, и у всей команды будет один и тот же зоопарк пакетов. Никаких «а у меня версия новее».
  • Разделяй и властвуй: Чётко видно, что нужно для прода (dependencies), а что — только для разработки, типа линтеров и тестов (dev-dependencies). Красота!
  • Публикация — раз плюнуть: Захотел свою библиотеку миру показать — пара команд, и ты уже звезда PyPI. Не то что вручную тарболлы крутить.

Ну а если не зайдет? Ну, варианты-то есть, куда ж без них:

  • pip + venv — старый добрый способ, если ты, блядь, максималист и любишь всё делать руками, как Герасим из рассказа.
  • pipenv — ну, типа конкурент, тоже неплохо, но, по ощущениям, Poetry сейчас больше паровоза набрал.

Короче, Poetry — это как перестать собирать мебель голыми руками и взять, наконец, нормальную отвёртку. Попробуй, а там видно будет.