Einleitung #
Python ist in den letzten Jahren eines der am weitesten verbreiteten Werkzeuge für Entwicklung, Datenanalyse und Automatisierung geworden. Doch mit der wachsenden Popularität steigen auch die Anforderungen an Performance, Sicherheit und Reproduzierbarkeit. Klassische Werkzeuge wie pip, venv oder pip-tools haben ihre Verdienste, stoßen aber zunehmend an Grenzen, insbesondere bei großen Projekten oder komplexem Dependency-Management.
Hier kommt uv ins Spiel: ein neues Tool, das Geschwindigkeit, Einfachheit und moderne Paketverwaltung vereint. Entwickelt als Ersatz und Weiterentwicklung bestehender Lösungen, bringt es frischen Wind in den Python-Alltag. Es kombiniert virtuelle Umgebungen, Paketmanagement und Lockfile-Verwaltung in einem einzigen, performanten Werkzeug.
Ein zentrales Ziel von uv ist es, alltägliche Abläufe schneller und konsistenter zu machen. Während ein klassisches pip install -r requirements.txt gerne mehrere Sekunden (oder Minuten) dauert, verspricht uv Installationen und Updates in Bruchteilen dieser Zeit. Zudem legt es großen Wert auf deterministische Builds und eine einfache Integration in CI/CD-Pipelines.
Darüber hinaus vereinfacht uv den Einstieg für neue Entwickler in bestehende Projekte. Statt aufwändig virtuelle Umgebungen und Abhängigkeiten manuell zu installieren, genügt ein uv sync, um ein Projekt lauffähig zu machen. Gerade in Teams reduziert das den Reibungsverlust erheblich.
Installation #
Die Installation von uv ist denkbar einfach. Unter Linux und macOS genügt:
curl -LsSf https://astral.sh/uv/install.sh | sh
Unter Windows kann uv über powershell installiert werden:
irm https://astral.sh/uv/install.ps1 | iex
Nach der Installation steht uns der Befehl uv im Terminal zur Verfügung. Mit uv --version können wir überprüfen, ob die Installation erfolgreich war.
Erste Schritte #
Ein typischer Workflow mit uv sieht so aus:
# Neues Projekt starten
uv init mein-projekt
cd mein-projekt
# Abhängigkeiten hinzufügen
uv add requests
# Skript ausführen
uv run python main.py
Hierbei übernimmt uv automatisch das Anlegen einer virtuellen Umgebung, die Verwaltung von Abhängigkeiten und die Erstellung einer uv.lock-Datei. Diese Datei ist das Herzstück für reproduzierbare Builds.
graph TD
A[Projektstart mit uv init] --> B[uv add ]
B --> C[uv.lock erzeugen]
C --> D[uv sync]
D --> E[uv run: Skripte ausführen]
Use Cases #
uv ist kein weiteres “nice to have” Tool, sondern eine echte Alternative zu etablierten Werkzeugen. Schauen wir uns drei konkrete Szenarien an, in denen uv klassische Tools ersetzen kann:
Ersatz für pip & requirements.txt
#
Bisher:
pip install -r requirements.txt
Mit uv:
uv sync
Vorteile:
- Schneller durch Caching und parallele Downloads
- Lockfile sorgt für reproduzierbare Installationen
- Keine manuelle Pflege einer
requirements.txtmehr nötig
Ersatz für venv
#
Bisher:
python -m venv .venv
source .venv/bin/activate
python app.py
Mit uv:
uv venv
uv run python app.py
# oder optional
uv venv --python 3.13
Vorteile:
- Automatisches Anlegen und Aktivieren der Umgebung
- Kein manuelles Handling mehr notwendig
- Verschiedene Python Versionen über ein einziges Flag auf Abruf
Ersatz für pip-tools
#
Bisher:
pip-compile requirements.in
pip install -r requirements.txt
Mit uv:
uv add fastapi uvicorn
uv erzeugt automatisch eine uv.lock Datei, die dasselbe Ziel wie pip-compile verfolgt, aber schneller und ohne zusätzliche Tools.
Erweiterte Funktionen #
In CI/CD Pipelines #
Durch das deterministische Lockfile ist uv ideal für den Einsatz in automatisierten Pipelines. Ein uv sync stellt sicher, dass in allen Umgebungen exakt dieselben Pakete installiert werden.
# Beispiel für GitHub Actions
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync
- name: Run tests
run: uv run pytest
Globale Paketverwaltung #
uv erlaubt nicht nur Projekt-spezifische Umgebungen, sondern kann auch globale Pakete verwalten. Das ist praktisch für Tools, die systemweit verfügbar sein sollen, wie black oder pre-commit.
uv tool install black
uv tool run black --version
Performance-Vergleich #
Ein großer Vorteil von uv ist die Geschwindigkeit. Benchmarks zeigen deutliche Unterschiede:
graph LR
A[pip install requests] -->|~6 Sekunden| B[Installation abgeschlossen]
C[uv add requests] -->|~0.8 Sekunden| D[Installation abgeschlossen]
In Tests konnte uv die Installationszeit um den Faktor 5–10 verkürzen. Besonders in großen Projekten summiert sich das zu erheblichen Zeitersparnissen. So können Sie besipielsweise Ihre CI/CD Pipeline Zeiten ohne große Umstellung verbessern.
Abhängigkeiten darstellen #
uv bietet die Möglichkeit, Abhängigkeiten klar darzustellen:
$ uv tree
Resolved 11 packages in 0.64ms
uvtestproject v0.1.0
├── django v5.1.2 (latest: v5.1.3)
├── mypy v1.13.0 (group: dev)
├── ruff v0.7.3 (group: dev)
└── gunicorn v23.0.0 (group: prod)
Dies liefert einen strukturierten Überblick, ähnlich wie npm ls im JavaScript-Ökosystem.
Praxisbeispiele #
FastAPI-Projekt starten #
uv init web-api
cd web-api
uv add fastapi uvicorn
uv run uvicorn main:app --reload
Data Science Workflow #
uv init data-project
cd data-project
uv add numpy pandas matplotlib jupyter
uv run jupyter notebook
Deployment vorbereiten #
In CI/CD-Umgebungen:
uv sync --frozen
uv run pytest
Das --frozen Flag stellt sicher, dass exakt die im Lockfile definierten Versionen verwendet werden.
Fazit #
Mit uv haben wir ein Werkzeug an der Hand, das viele altbekannte Prozesse vereinfacht und beschleunigt. Es vereint die Funktionen von pip, venv und pip-tools in einer modernen, performanten Lösung. Besonders spannend ist der Fokus auf Geschwindigkeit und Reproduzierbarkeit – zwei Faktoren, die in der modernen Softwareentwicklung immer wichtiger werden.
uv ist damit nicht nur ein Tool für Enthusiasten, sondern ein ernstzunehmender Kandidat für den neuen Standard im Python-Ökosystem. Es senkt Einstiegshürden für neue Entwickler, erhöht die Produktivität in Teams und reduziert Fehlerquellen in Deployments.
Wir können uv als nächsten Schritt in der Evolution der Python-Entwicklung betrachten. Wer heute ein neues Projekt startet, sollte ernsthaft darüber nachdenken, uv als Standardwerkzeug einzusetzen.
Wenn Sie Fragen oder Anmerkungen zum Artikel haben, kontaktieren Sie mich gerne über die unten genannten Kanäle.
Weiterführend: