Ответ
В своих проектах я активно использовал обе системы.
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для воспроизводимости.