Claude Code & uv: Der schnellste Python-Paketmanager im Einsatz

Wer Python-Projekte mit Claude Code aufbaut, stellt sich irgendwann die Frage nach dem richtigen Paketmanager. pip ist langsam. Poetry ist mächtig, aber schwer. conda ist eine eigene Welt. Seit 2024 gibt es eine Alternative, die alles davon in den Schatten stellt: uv — ein in Rust geschriebener Paketmanager, der pip vollständig ersetzt und dabei zehn- bis hundertfach schneller ist.

Dieser Artikel zeigt, was uv kann, wie es sich gegen die etablierten Werkzeuge behauptet und wie du es direkt mit Claude Code kombinierst — für Python-Projekte, die schnell starten, sauber bleiben und in CI/CD reibungslos laufen.

Claude Code Mastery — Python, Agents, Workflows auf Deutsch

Nicht nur uv: der Kurs zeigt, wie du Claude Code wirklich produktiv einsetzt — für Python-Projekte, autonome Agents und professionelle Workflows. Einmalig bezahlt, kein Abo.

Zum Kurs — Jetzt starten → Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht

1. Was ist uv — und warum Rust?

uv wurde von Astral entwickelt — demselben Team hinter ruff, dem schnellsten Python-Linter. Der Ansatz ist identisch: Python-Tooling in Rust neu schreiben, weil Python-Tools die Hauptflaschenstelle in Python-Tooling sind. Das klingt paradox, ist aber messbar.

Rust kompiliert zu nativem Maschinencode ohne Interpreter-Overhead. Für Aufgaben wie Dependency-Resolution, Datei-I/O und Netzwerkanfragen — also genau das, was ein Paketmanager tut — ist das der entscheidende Unterschied. uv löst Abhängigkeitsgraphen in Millisekunden, wo pip Sekunden oder sogar Minuten braucht.

Benchmarks aus der Praxis: Ein frisches Django-Projekt mit rund 30 Abhängigkeiten: pip braucht typischerweise 45–90 Sekunden bei einer kalten Installation. uv schafft dasselbe in 2–4 Sekunden. Bei einem warmen Cache (bereits heruntergeladene Pakete) sinkt uv auf unter eine Sekunde.

uv ist kein Fork von pip — es ist eine vollständige Neuimplementierung. Es liest pyproject.toml, versteht requirements.txt, erzeugt uv.lock-Dateien und verhält sich in nahezu allen Situationen identisch zu pip — nur schneller und mit besserer Fehlerdiagnose.

2. uv vs. pip, Poetry und conda

Der Vergleich ist wichtig, weil jedes dieser Werkzeuge einen anderen Ansatz verfolgt und uv nicht alle ersetzt — aber die meisten:

"uv macht, was pip macht — nur 10× schneller, mit Lock-Dateien und ohne versteckte Überraschungen."

3. Projekt starten mit uv init

Der einfachste Einstieg: ein neues Python-Projekt initialisieren. uv init erzeugt die Projektstruktur, legt pyproject.toml an und konfiguriert die virtuelle Umgebung.

# Neues Projekt anlegen
uv init mein-projekt
cd mein-projekt

# Was entstanden ist:
# pyproject.toml  — Projektkonfiguration
# .python-version — Python-Version (optional)
# src/            — Quellcode-Verzeichnis
# README.md

Claude Code versteht dieses Setup direkt. Wenn du Claude Code in einem uv-Projekt startest, erkennt es pyproject.toml und weiß, dass Pakete mit uv add statt pip install hinzugefügt werden sollen. Das ist besonders praktisch, wenn Claude Code eigenständig Abhängigkeiten installiert — zum Beispiel beim Einrichten einer neuen Bibliothek, die für eine Aufgabe nötig ist.

4. Pakete verwalten: uv add und uv remove

Das Hinzufügen von Paketen ist in uv expliziter als in pip — und das ist gut so. Statt pip install requests verwendest du uv add requests, was automatisch pyproject.toml aktualisiert und die Lock-Datei neu berechnet.

# Paket hinzufügen (aktualisiert pyproject.toml + uv.lock)
uv add requests

# Mehrere Pakete auf einmal
uv add fastapi uvicorn pydantic

# Nur für Entwicklung (dev-Abhängigkeit)
uv add --dev pytest black ruff

# Bestimmte Version
uv add "django>=5.0,<6.0"

# Paket entfernen
uv remove requests

Der entscheidende Unterschied zu pip install: uv schreibt die Abhängigkeit sofort in pyproject.toml. Bei pip musst du das manuell tun oder pip freeze verwenden — was zu Divergenzen zwischen dem, was installiert ist, und dem, was dokumentiert ist, führt.

Direkt mit Claude Code kombinieren

In einem uv-Projekt kannst du Claude Code anweisen, Abhängigkeiten eigenständig zu verwalten:

claude "Ich brauche eine FastAPI-Anwendung mit SQLite-Anbindung.
Installiere die nötigen Pakete mit uv und erstelle ein Grundgerüst."

Claude Code führt dann uv add fastapi uvicorn sqlalchemy aus, legt die Dateistruktur an und schreibt den initialen Code — alles in einem Schritt, ohne dass du den Paketmanager-Befehl selbst tippen musst.

5. Virtuelle Umgebungen mit uv

uv erstellt und verwaltet virtuelle Umgebungen schneller als python -m venv — und integriert sie direkt in den Workflow, ohne dass man explizit aktivieren muss.

# Virtuelle Umgebung explizit erstellen
uv venv

# Mit bestimmter Python-Version
uv venv --python 3.12

# Umgebung aktivieren (klassisch)
source .venv/bin/activate

# Oder: direkt mit uv run ausführen (ohne Aktivierung)
uv run python main.py

uv run ist der Schlüssel: Statt die virtuelle Umgebung zu aktivieren, kannst du jeden Befehl mit uv run präfixieren. uv aktiviert die Umgebung temporär, führt den Befehl aus und kehrt zur normalen Shell zurück. Das ist besonders praktisch in Skripten und CI/CD, wo ein aktivierter venv-Zustand Probleme machen kann.

6. uv lock: reproduzierbare Builds

Das wichtigste Feature für Produktionsumgebungen: uv.lock. Diese Datei enthält die exakten Versionen aller Pakete — direkte und transitive Abhängigkeiten — und sorgt dafür, dass jede Installation identisch ist.

# Lock-Datei explizit aktualisieren
uv lock

# Aus Lock-Datei installieren (für Deployment)
uv sync

# Nur Produktions-Abhängigkeiten (ohne dev)
uv sync --no-dev

# Pakete auf neueste kompatible Versionen aktualisieren
uv lock --upgrade

Die uv.lock-Datei gehört ins Git-Repository. Sie ist das Gegenstück zu package-lock.json aus der Node-Welt oder Cargo.lock aus der Rust-Welt: ein verbindlicher Snapshot des Dependency-Zustands, der sicherstellt, dass Entwicklung, Staging und Production identische Pakete verwenden.

7. uv pip: Drop-in-Ersatz für bestehende Workflows

Wer uv schrittweise einführen will, ohne bestehende Skripte anzupassen, nutzt den uv pip-Subbefehl. Er implementiert die vollständige pip-Schnittstelle — inklusive install, freeze, list, uninstall und download.

# Exakte pip-Kompatibilität
uv pip install requests
uv pip install -r requirements.txt
uv pip freeze > requirements.txt
uv pip list
uv pip uninstall requests

# Pakete in bestimmte Umgebung installieren
uv pip install --python /usr/bin/python3.11 flask

Das bedeutet: bestehende requirements.txt-Workflows, Makefile-Ziele und CI-Skripte, die pip aufrufen, lassen sich auf uv pip umstellen ohne weitere Änderungen. Die Beschleunigung ist sofort spürbar — besonders in CI/CD, wo kalte Installationen die Laufzeit dominieren.

8. CI/CD-Integration

uv ist für CI/CD gemacht. Es hat kein aufwendiges Setup, keinen eigenen Daemon und keinen globalen Zustand. Eine typische GitHub-Actions-Integration:

- name: Python-Umgebung einrichten
  uses: actions/setup-python@v5
  with:
    python-version: '3.12'

- name: uv installieren
  run: pip install uv

- name: Abhängigkeiten installieren
  run: uv sync --no-dev

- name: Tests ausführen
  run: uv run pytest

Alternativ direkt mit dem offiziellen uv-Action:

- name: uv einrichten
  uses: astral-sh/setup-uv@v3
  with:
    enable-cache: true

- name: Projekt installieren
  run: uv sync --frozen

Wichtig: In CI immer uv sync --frozen statt uv sync verwenden. --frozen verbietet Änderungen an der Lock-Datei — wenn uv.lock nicht zum pyproject.toml passt, schlägt der Build fehl statt still die Lock-Datei zu ändern. Das verhindert unbemerkte Dependency-Drift in der Pipeline.

Der Vorteil im Vergleich zu pip in CI: Mit dem enable-cache: true-Flag cached uv die heruntergeladenen Pakete zwischen Runs. Das reduziert die Installationszeit bei einem Warm-Cache auf Sekundenbruchteile — statt der 30–60 Sekunden, die pip typischerweise auch mit Cache braucht.

9. Claude Code-Tipps für uv-Projekte

Die Kombination aus Claude Code und uv ist besonders leistungsstark, wenn beide Werkzeuge aufeinander abgestimmt sind. Ein paar konkrete Ansätze:

# In CLAUDE.md eintragen:
# Dieses Projekt verwendet uv als Paketmanager.
# Pakete mit "uv add" hinzufügen, niemals "pip install".
# Skripte mit "uv run" starten.
# Nach Änderungen an Abhängigkeiten: "uv lock" aufrufen.

Claude Code hält sich konsequent an diese Direktiven, sobald sie in CLAUDE.md stehen — auch beim autonomen Arbeiten in längeren Sessions, wo es eigenständig Werkzeuge installiert und Code ausführt.

Zwei verwandte Artikel, die auf diesem Thema aufbauen:


Claude Code Mastery — von Python-Projekten bis zum produktiven Agenten

uv ist ein Baustein. Im Kurs lernst du den gesamten Stack: Python-Workflows, Agents, MCP-Server, Hooks und Multi-Agent-Koordination. Vollständig auf Deutsch, einmalig bezahlt.

Jetzt starten → Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht

Kurs · Claude Code Mastery

Von Python-Tooling zum produktiven AI-Agenten

uv. Agents. MCP. Hooks. Multi-Agent-Workflows. Alles auf Deutsch, einmalig bezahlt — kein Abo, keine Plattformabhängigkeit.

Jetzt einsteigen → Kursübersicht ansehen →

Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht