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