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 = 100Enthä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 InstallationLegt .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 freezefriert 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,
.venvnicht 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 intests/, 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