uv, Poetry и управление проектами: создание современных проектов Python
Коротко: Современные проекты Python используют pyproject.toml, изолированные окружения и lock-файлы; инструменты вроде uv или Poetry управляют зависимостями, версиями Python и сборками быстрее и воспроизводимее, чем один pip.
Подробнее: Для небольших скриптов хватает pip install и requirements.txt. Для проектов с несколькими разработчиками, развёртываниями и тестами нужны определённые версии, отдельные окружения и lock-файлы.
Подробности
pyproject.toml
Центральный файл конфигурации (PEP 621):
[project]
name = "gamecatalog"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = ["fastapi>=0.110", "httpx"]
[dependency-groups]
dev = ["pytest", "mypy", "ruff"]
[tool.ruff]
line-length = 100Содержит метаданные, зависимости, конфигурацию инструментов (ruff, pytest, mypy, black). Заменяет setup.py/setup.cfg. Бэкенды сборки: hatchling, setuptools, poetry-core.
uv
uv (Astral, написан на Rust): чрезвычайно быстрый менеджер пакетов и инструмент проектов.
uv init gamecatalog && cd gamecatalog
uv add fastapi httpx # зависимость + uv.lock
uv add --dev pytest ruff mypy
uv run pytest # выполняется в окружении проекта
uv python install 3.12 # управление версией Python
uv sync # установить точно по lock-файлу
uvx ruff check . # однократно запустить инструмент без установкиСоздаёт .venv, записывает uv.lock (воспроизводимо). Совместим с pip (uv pip install).
Poetry и другие
- Poetry: разрешение зависимостей,
poetry.lock, управление virtualenv, сборка/публикация (poetry add,poetry install,poetry run). - PDM, Hatch, Rye (→ uv): схожие подходы.
- pip + venv: основа (
python -m venv .venv,pip install -r requirements.txt);pip freezeзамораживает, pip-tools (pip-compile) создаёт lock-файлы. - conda/mamba для научных пакетов (нативные библиотеки, CUDA).
- pipx для CLI-инструментов (устанавливаются изолированно).
- Docker: зафиксировать окружение в контейнере.
Хорошая практика
- Одно окружение на проект, не коммитьте
.venv(.gitignore), коммитьте lock-файл. - Зафиксируйте версию Python (
.python-version,requires-python). - Отделяйте зависимости для разработки.
- Обновления: Dependabot/Renovate,
uv lock --upgrade, читайте журналы изменений (SemVer). - Безопасность:
pip-audit/uv pip audit, проверяйте источники (typosquatting, цепочка поставок), хэши (--require-hashes). - Линтер/форматировщик: ruff (в значительной мере заменяет flake8/isort/black), хуки pre-commit.
- Структура: раскладка
src/, тесты вtests/, точка входа CLI[project.scripts]. - Обучение/проект: README с шагами установки (
uv sync && uv run pytest) для проверяющих.
См. также: Семантическое версионирование, Conda и Jupyter