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

«Какие системы управления зависимостями в Python (pip, poetry) вы использовали?» — вопрос из категории Python, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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 для воспроизводимости.