EMZETT.
Login

uv, Poetry und Projektverwaltung: Moderne Python-Projekte aufsetzen

Kurz: Moderne Python-Projekte nutzen pyproject.toml, isolierte Umgebungen und Lockfiles; Werkzeuge wie uv oder Poetry verwalten Abhängigkeiten, Python-Versionen und Builds schneller und reproduzierbarer als pip allein.

Genauer: pip install und requirements.txt genügen für kleine Skripte. Bei Projekten mit mehreren Entwicklern, Deployments und Tests braucht man definierte Versionen, getrennte Umgebungen und Lockfiles.

Im Detail

pyproject.toml

Die zentrale Konfigurationsdatei (PEP 621):

[project]
name = "spielekatalog"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = ["fastapi>=0.110", "httpx"]
 
[dependency-groups]
dev = ["pytest", "mypy", "ruff"]
 
[tool.ruff]
line-length = 100

Enthält Metadaten, Abhängigkeiten, Werkzeug-Konfiguration (ruff, pytest, mypy, black). Ersetzt setup.py/setup.cfg. Build-Backends: hatchling, setuptools, poetry-core.

uv

uv (Astral, in Rust): extrem schneller Paketmanager und Projektwerkzeug.

uv init spielekatalog && cd spielekatalog
uv add fastapi httpx            # Abhängigkeit + uv.lock
uv add --dev pytest ruff mypy
uv run pytest                    # führt in der Projektumgebung aus
uv python install 3.12           # Python-Version verwalten
uv sync                          # exakt nach Lockfile installieren
uvx ruff check .                 # Tool einmalig ohne Installation

Legt .venv an, schreibt uv.lock (reproduzierbar). Kompatibel mit pip (uv pip install).

Poetry und Co.

  • Poetry: Abhängigkeitsauflösung, poetry.lock, Virtualenv-Verwaltung, Build/Publish (poetry add, poetry install, poetry run).
  • PDM, Hatch, Rye (→ uv): ähnliche Ansätze.
  • pip + venv: Basis (python -m venv .venv, pip install -r requirements.txt); pip freeze friert ein, pip-tools (pip-compile) erzeugt Lockfiles.
  • conda/mamba für wissenschaftliche Pakete (native Bibliotheken, CUDA).
  • pipx für CLI-Tools (isoliert installiert).
  • Docker: Umgebung im Container fixieren.

Gute Praxis

  • Eine Umgebung pro Projekt, .venv nicht einchecken (.gitignore), Lockfile einchecken.
  • Python-Version festlegen (.python-version, requires-python).
  • Dev-Abhängigkeiten trennen.
  • Updates: Dependabot/Renovate, uv lock --upgrade, Changelogs lesen (SemVer).
  • Sicherheit: pip-audit/uv pip audit, Quellen prüfen (Typosquatting, Lieferkette), Hashes (--require-hashes).
  • Linter/Formatter: ruff (ersetzt flake8/isort/black weitgehend), pre-commit-Hooks.
  • Struktur: src/-Layout, Tests in tests/, CLI-Einstieg [project.scripts].
  • Ausbildung/Projekt: README mit Setup-Schritten (uv sync && uv run pytest) für Prüfer.

Siehe auch: pip und venv, Semantische Versionierung, Conda und Jupyter