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ückgaberecht1. 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:
- pip: Das Standard-Tool seit 2008. Funktioniert überall, hat aber keine Lock-Datei-Semantik und ist langsam bei großen Dependency-Bäumen. uv ist ein direkter Drop-in-Ersatz mit identischer API.
- Poetry: Modernes Tooling mit eigenem Abhängigkeits-Solver,
pyproject.toml-Unterstützung und Lock-Dateien. Gut, aber langsam und mit eigenem Ökosystem. uv übernimmt den guten Teil (Locks, pyproject.toml) und ist deutlich schneller. - conda: Stark in der Data-Science-Welt, verwaltet auch Nicht-Python-Pakete (CUDA, OpenBLAS etc.). uv ersetzt conda nicht für Umgebungen, die stark auf native Bibliotheken angewiesen sind — für reines Python-Tooling ist uv aber die bessere Wahl.
- Pipenv: Kombiniert pip und virtualenv, wurde aber von der Community weitgehend von Poetry und uv abgelöst. uv ist hier der klare Nachfolger.
"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:
- CLAUDE.md konfigurieren: Trage in deiner
CLAUDE.mdein, dass dieses Projekt uv verwendet. Claude Code liest diese Datei beim Start und passt seine Befehle entsprechend an — es ruft dann automatischuv addstattpip installauf. - uv run für alle Aufrufe: Bitte Claude Code, Skripte immer mit
uv run pythonstattpythonaufzurufen. Das stellt sicher, dass die richtige virtuelle Umgebung aktiv ist. - Lock-Datei committen lassen: Wenn Claude Code Abhängigkeiten hinzufügt, lass es direkt
uv lockaufrufen und die aktualisierteuv.lockcommitten. So bleibt der Repo-Zustand konsistent. - Migration von pip: Wenn du ein bestehendes Projekt mit
requirements.txtauf uv migrieren möchtest, reicht ein Befehl:uv add -r requirements.txt. Claude Code kann diesen Schritt einschließlich Cleanup der alten Datei für dich ausführen.
# 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 für Python-Projekte — vollständiger Workflow von der Projektstruktur bis zum Deployment
- Claude Code Debugging — Bugs in Minuten statt Stunden finden
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ückgaberechtKurs · 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.
Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht