Какие системы управления зависимостями в Python (pip, poetry) вы использовали?

Ответ

В своих проектах я активно использовал обе системы.

1. pip + virtualenv/venv: Это стандартный стек для большинства проектов. Я создаю изолированное окружение и фиксирую зависимости в requirements.txt.

# Создание и активация окружения
python -m venv .venv
source .venv/bin/activate  # .venvScriptsactivate на Windows

# Установка зависимостей
pip install -r requirements.txt

# Для фиксации версий (например, для продакшена)
pip freeze > requirements.txt

2. Poetry: Я применяю его в новых проектах, особенно когда нужно управлять не только зависимостями, но и сборкой, публикацией пакетов и скриптами. pyproject.toml заменяет setup.py, requirements.txt и setup.cfg.

# pyproject.toml
[tool.poetry]
name = "my-service"
version = "0.1.0"

[tool.poetry.dependencies]
python = "^3.9"
fastapi = "^0.104.0"
sqlalchemy = {version = "^2.0.0", extras = ["asyncio"]}
pandas = "^2.1.0"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
black = "^23.0.0"

[tool.poetry.scripts]
start = "my_service.main:run"

Мой выбор зависит от контекста:

  • Poetry — для standalone-сервисов или библиотек, где важны точные версии, lock-файл и удобная публикация.
  • pip/venv — для работы в больших монолитах или контейнеризированных средах (Docker), где зависимости уже строго контролируются иным способом. В Dockerfile я всё равно финализирую зависимости через pip freeze для воспроизводимости.

Ответ 18+ 🔞

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

1. pip + virtualenv/venv: Это, можно сказать, классика жанра. Работает, проверено годами, как старый Запорожец — громко, дымит, но едет. Берёшь, создаёшь изоляцию, чтобы зависимости одного проекта не полезли в другой, как тараканы по кухне.

# Создание и активация окружения
python -m venv .venv
source .venv/bin/activate  # .venvScriptsactivate на Windows

# Установка зависимостей
pip install -r requirements.txt

# Для фиксации версий (например, для продакшена)
pip freeze > requirements.txt

Всё просто, прямолинейно. Но вот этот pip freeze — он же, бля, вываливает тебе ВСЁ, что в окружении сидит, включая какую-нибудь системную библиотеку, которую ты случайно поставил полгода назад. Получается файл requirements.txt, в котором овердохуища записей, и половину из них потом на проде ставить не надо. Чистая рулетка.

2. Poetry: А это уже, считай, иномарка с автоматом и подогревом сидений. Особенно кайфово, когда пишешь что-то самодостаточное — сервис или библиотеку для публикации. Он там и версии аккуратно контролирует через pyproject.toml, и lock-файл генерирует, чтобы на любой машине один в один собралось. И скрипты запускать удобно.

# pyproject.toml
[tool.poetry]
name = "my-service"
version = "0.1.0"

[tool.poetry.dependencies]
python = "^3.9"
fastapi = "^0.104.0"
sqlalchemy = {version = "^2.0.0", extras = ["asyncio"]}
pandas = "^2.1.0"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
black = "^23.0.0"

[tool.poetry.scripts]
start = "my_service.main:run"

Смотри, как красиво: зависимости для прода и для разработки отдельно, версии гибко задаются. Красота, да и только. Но, ёпта, не без косяков. Иногда он так задумчиво решает зависимости, что можно чай успеть заварить. И в каких-то специфичных корпоративных сетях с своими артефакториями — это ещё тот квест его настроить.

Так на чём же я, в итоге, остановился? А выбор, чувак, от задачи пляшет.

  • Poetry — это мой фаворит для новых, зелёных проектов. Особенно когда нужно, чтобы у всех в команде собралось идентично, и чтобы потом этот пакет в PyPI запихнуть без лишней нервотрёпки. Lock-файл — это святое.
  • pip/venv — это когда лезешь в какой-нибудь древний, разросшийся монолит, где уже двадцать requirements.txt в разных папках. Или когда всё засунуто в Docker-контейнер, и там уже своя магия по установке зависимостей происходит. Там проще не умничать, а по-старинке: создал окружение, зафиксировал через freeze и пошёл дальше, в рот меня чих-пых. Главное — чтобы работало.

В общем, инструменты как девушки: у каждой свой характер. Одну на свидание в ресторан, другую — чтобы картошку на даче копать. Выбирай по обстановке.