uv - Das Alleskönner Tool für Python

Python

Python ist beliebt, aber das Packaging-Ökosystem hat über Jahre hinweg für Frust gesorgt: pip, venv, virtualenv, pipx, pyenv – das Zusammenspiel dieser Tools ist oft wenig intuitiv. Hier kommt uv ins Spiel: ein in Rust geschriebener, blitzschneller Package Manager, der viele dieser Tools in einem einzigen Werkzeug vereint. Entwickelt von Astral, will uv das Paketmanagement von Grund auf modernisieren.

Was ist uv?

uv ist ein All-in-One-Tool für das Python-Umfeld. Es kombiniert:

  • Paketinstallation (als Drop-in-Ersatz für pip)
  • Erstellung und Verwaltung von virtuellen Umgebungen (wie venv)
  • Unterstützung für Python-Versionen und automatische Installation (vergleichbar mit pyenv)
  • Workspaces für monorepo-ähnliche Projekte

Das Ganze ist in Rust geschrieben und dadurch extrem performant.

Die Probleme klassischer Tools

Ein klassisches Setup könnte so aussehen:

  • pyenv zum Installieren einer Python-Version
  • venv oder virtualenv zur Erstellung von Umgebungen
  • pip zur Paketinstallation
  • pip-tools oder poetry zum Locken von Abhängigkeiten
  • pipx für isolierte CLI-Tools

Dieses Ökosystem ist mächtig, aber fragmentiert. uv bündelt all das in einem einzigen Tool. Das bedeutet:

  • Weniger Komplexität
  • Schnellere Installationen
  • Einfachere Konfiguration

Installation

Die Installation ist denkbar einfach:

MacOS und Linux

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Alternativ:

pip install uv

Performance: Rust macht den Unterschied

Der Einsatz von Rust als Implementierungssprache sorgt dafür, dass uv deutlich schneller ist als pip. Installationen, Auflösungen von Abhängigkeiten und Erstellung von virtuellen Umgebungen laufen spürbar flotter ab. Benchmarks zeigen eine bis zu 10-fache Geschwindigkeit im Vergleich zu klassischen Python-Tools.

Ausgabe von uv nach der Installation von Abhängigkeiten

Zudem nutzt uv aggressive Caching-Strategien und parallele Downloads, um den Installationsprozess weiter zu beschleunigen.

All-in-One: Mehr als nur pip

uv geht weit über die Fähigkeiten von pip hinaus:

1. Paketmanagement mit Lockfiles

Ähnlich wie poetry oder pip-tools bietet uv Unterstützung für Lockfiles, um reproduzierbare Builds zu garantieren.

2. Virtuelle Umgebungen

Virtuelle Umgebungen werden direkt im .venv-Verzeichnis erstellt und verwaltet. Kein python -m venv oder virtualenv mehr nötig.

3. Python-Installation

Falls eine benötigte Python-Version nicht vorhanden ist, kann uv diese automatisch installieren – ähnlich wie pyenv, aber integriert.

4. CLI-Tools isolieren (pipx-Ersatz)

CLI-Tools lassen sich mit uv ebenfalls isoliert installieren und nutzen, ohne das System zu "verschmutzen".

Beispiel: Installation und Nutzung von ruff, einem beliebten Linter für Python:

uv venv --name tools
uv add ruff

# oder als Pip-Ersatz (ohne .lock Datei) 
# uv pip install ruff

.venv/bin/ruff check src/

Alternativ kann man ruff in einem dedizierten Workspace oder via Projektkonfiguration integrieren und über uv run aufrufen:

uv run ruff check src/

So lassen sich Tools systemunabhängig und reproduzierbar installieren und verwenden – ganz ohne globale Abhängigkeiten.


Die Hilfe gibt den Funktionsumfang von uv ganz gut wieder:

An extremely fast Python package manager.

Usage: uv [OPTIONS] <COMMAND>

Commands:
  run      Run a command or script
  init     Create a new project
  add      Add dependencies to the project
  remove   Remove dependencies from the project
  sync     Update the project's environment
  lock     Update the project's lockfile
  export   Export the project's lockfile to an alternate format
  tree     Display the project's dependency tree
  tool     Run and install commands provided by Python packages
  python   Manage Python versions and installations
  pip      Manage Python packages with a pip-compatible interface
  venv     Create a virtual environment
  build    Build Python packages into source distributions and wheels
  publish  Upload distributions to an index
  cache    Manage uv's cache
  self     Manage the uv executable
  version  Display uv's version
  help     Display documentation for a command

Workspace-Support

uv unterstützt sogenannte Workspaces, ähnlich wie man es von yarn oder pnpm in der JavaScript-Welt kennt. Damit lassen sich mehrere Subprojekte mit eigenen Abhängigkeiten, aber gemeinsamer Konfiguration verwalten – ideal für monolithische Repositories oder Microservices.

Ein typisches Setup:

[workspace]
members = ["core", "api", "cli"]

Workspaces vereinfachen das Dependency-Management und fördern konsistente Umgebungen innerhalb großer Projekte.

Beispiele aus der Praxis

Einfaches Projekt aufsetzen

uv venv
uv add requests

# oder als Pip-Ersatz (ohne .lock Datei) 
# uv pip install requests

uv run script.py

Neues Projekt mit Workspace erstellen

uv init --workspace

Das erzeugt eine Grundstruktur mit uv.toml und .venv, bereit zur Erweiterung.

Fazit

uv ist ein echter Game-Changer für das Python-Ökosystem. Durch die Kombination aus hoher Performance, klarer Benutzerführung und umfassender Funktionalität bietet es eine moderne Alternative zu den etablierten, oft fragmentierten Tools. Für Entwickler und DevOps, die regelmäßig mit Python arbeiten, lohnt sich ein Blick auf uv – vielleicht ist es das Tool, auf das wir alle gewartet haben.