Ответ
В своих проектах я активно использовал обе системы.
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и пошёл дальше, в рот меня чих-пых. Главное — чтобы работало.
В общем, инструменты как девушки: у каждой свой характер. Одну на свидание в ресторан, другую — чтобы картошку на даче копать. Выбирай по обстановке.