EMZETT.
Увійти

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