Die meisten meiner privaten Projekte schreibe ich in Python. Ende 2019 erschien Poetry. Es war lange mein bevorzugtes Tool für das Dependency- und Paketmanagement in Python. Es hat das Hinzufügen, Aktualisieren und Entfernen von Abhängigkeiten enorm vereinfacht, automatisch virtuelle Umgebungen verwaltet und mit der poetry.lock
-Datei für reproduzierbare Setups gesorgt. Heute probiere ich ein neues Tool aus: uv.
Mit uv gibt es einen neuen, in Rust geschriebenen Paketmanager, der manche Schwächen von Poetry adressiert und neue Vorteile bietet. Ausschlaggebend für meinen Test war, dass uv von den gleichen Entwicklern wie Ruff stammt – ein Tool, das ich bereits intensiv nutze und von dem ich absolut begeistert bin. Da Ruff meine Arbeitsweise in Python bereits deutlich verbessert hat, war ich gespannt, ob uv ähnliche Vorteile bieten kann.
Was mir bei Poetry bislang wirklich gefehlt hat, war die einfache Möglichkeit, zwischen verschiedenen Python-Versionen zu wechseln. uv ersetzt nicht nur pip und Poetry, sondern auch Tools wie pyenv, mit denen sich mehrere Python-Versionen parallel installieren, verwalten und projektbezogen auswählen lassen – ohne Versionskonflikte. Die jeweils benötigte Python-Version wird von uv automatisch installiert und verwaltet, indem du eine .python-version
-Datei im Projekt setzt.
Und auch wenn Poetry schon einen enormen Geschwindigkeitsvorteil gegenüber dem klassischen Ansatz mit pip bietet, ist uv noch einmal schneller. 10-100 Mal schneller als pip versprechen die Entwickler. In den meisten Projekten, die ich privat oder auf der Arbeit betreue, hat mich die Geschwindigkeit von Poetry zwar nur selten gestört, wenn du uv aber einmal benutzt, ist die Schwuppdizität spürbar erhöht. Auch für CI-Pipelines ein enormer Gewinn.
Installation
Zur Installation von uv gibt es eine Vielzahl Möglichkeiten. Ich habe uv aus den Paketquellen meiner Linux-Distribution installiert, wenn das für dich nicht möglich ist, empfehle ich die Installation mit dem Standalone installer.
Anschließend trägst du dir die Shell autocompletion in die Konfigurations-Datei deiner Shell ein. Folge dazu einfach den Schritten in der Dokumenation.
Migration
Die Migration deines bestehenden Projekts ist wirklich extrem einfach. uv bringt uvx mit. uvx ist ein Kommandozeilen-Tool und eine Kurzform für uv tool run
, das zum schnellen Ausführen von Python-basierten Kommandozeilen-Tools dient. Mit uvx kannst du beliebige Python-Tools ausführen, ohne sie vorher in deiner Projektumgebung installieren zu müssen. Stattdessen wird das gewünschte Tool in einer temporären, von uv verwalteten virtuellen Umgebung ausgeführt, die im Cache liegt. Das hält deine Projektabhängigkeiten sauber und ermöglicht eine sehr schnelle Ausführung.
uvx kannst du auch nutzen, um das Tool migrate-to-uv zu nutzen und damit dein Projekt von Poetry (oder einem anderen Paketmanager) zu uv zu migrieren.
uvx migrate-to-uv
Dieses Tool übernimmt automatisch:
- Die Konvertierung der Projektmetadaten von Poetry zu uv
- Die Übernahme der Abhängigkeitsversionen
- Die Erzeugung einer neuen
uv.lock
-Datei (und das Entfernen derpoetry.lock
-Datei) - Die Beibehaltung von Abhängigkeitsgruppen (Dependency Groups)
Zum Schluss bietet sich noch das Setzen eines Alias zum Aktivieren des virtuellen Environment an. Einen solchen Alias habe ich schon seit langem und erleichtert mir enorm die Aktivierung.
avenv() { source venv/bin/activate 2>/dev/null || source .venv/bin/activate 2>/dev/null || echo "No venv found."; }
Diese Zeile trägst du in deine Shell-Konfiguration ein und kannst ab sofort mit avenv
das Environment öffnen.
Fazit
Nach vielen Jahren mit Poetry als treuem Begleiter im Python-Ökosystem hat mich uv wirklich überrascht. Die Kombination aus beeindruckender Geschwindigkeit, einfacher Verwaltung verschiedener Python-Versionen und der wirklich unkomplizierten Migration bestehender Projekte macht uv zu einer spannenden Alternative – gerade auch für Entwickler:innen, die Wert auf moderne und effiziente Workflows legen.