Python-Paketmanagement: Ein neues, vielversprechendes Tool namens UV
- Von Torben Windler
- Data Science
Share post:
In unserer Rolle als Data-Science und KI-Beratung suchen wir ständig nach Tools, die unsere Arbeit in unseren Kundenprojekten effizienter machen. Eine bekannte Herausforderung im Python-Ökosystem ist der Paketmanager pip, besonders bei großen Projekten mit vielen Abhängigkeiten. Genau hier setzt UV von Astral an.
Unsere Situation
In unseren Projekten ist Python die Sprache der Wahl. Das Ökosystem ist so ausgereift und man kann auf Bibliotheken in unterschiedlichen Programmiersprachen zugreifen, um bestimmte Dinge optimal auszuführen.
Eine bekanntermaßen komplexe Aufgabe ist allerdings das
Managen von Dependencies und Environments.
Zum jetzigen Stand nutzen wir hauptsächlich poetry für das Python-Paketmanagement, was uns ziemlich gut gefällt, nicht zuletzt wegen der einfachen Syntax, aber dennoch vielen manuellen Eingriffsmöglichkeiten. Nichtsdestotrotz muss hier die korrekte Python-Version manuell installiert werden und das Auflösen der Dependencies kann gerade bei großen Projekten etwas länger dauern. Als wir also von UV gehört haben, mussten wir es definitiv probieren!
Was bringt uns UV?
1. Speed!
UV ist beim Auflösen und Installieren der Dependencies unglaublich schnell. Das liegt vor allem an effizientem Caching, falls die Packages schon einmal auf der gleichen Maschine installiert waren, aber auch daran, dass UV komplett in Rust geschrieben ist und daher von den entsprechenden Vorteilen dieser kompilierten Sprache profitiert.
2. Reproduzierbarkeit!
Mit mehreren Entwicklern an einem Projekt, unterschiedlichen Plattformen und Dev-, Test- und Prod-Umgebungen kann es ziemlich komplex sein, immer die exakt gleichen Voraussetzungen zu schaffen. Dies kann zu Bugs führen, welche unter Umständen sehr schwierig zu identifizieren sind. UV übernimmt hier das komplette Management der Abhängigkeiten und der Entwicklungsumgebung und stellt so sicher, dass auf jeder Plattform mit den gleichen Voraussetzungen gearbeitet werden kann.
3. Syntax!
UV hat eine sehr ähnliche Syntax zu Poetry, was wir seit ca. zwei Jahren standardmäßig in neuen Projekten nutzen. Auch die zugrundeliegenden pyproject.toml sowie *.lock Dateien sind bereits von Poetry bekannt. Hier können mit einer sehr verständlichen und weitgehend bereits bekannten Syntax einen schnellen Wechsel herbeiführen.
4. Integration!
UV integriert sich nahtlos in bestehende Workflows, sodass Entwickler nicht ihre Arbeit anpassen müssen. Bestehende requirements.txt-Dateien funktionieren direkt mit UV, und bekannte Befehle wie `pip install` können problemlos durch UV ersetzt werden.
Darüber hinaus hat das Team von Astral mit Ruff bereits ein sehr gutes Tool kreiert, das wir standardmäßig nutzen. Dies gibt uns ein zusätzliches Maß an Vertrauen und eine berechtigte Hoffnung, dass auch UV stabil weiterentwickelt wird.
Fazit
UV bringt laut Hersteller Astral einige vielversprechende Verbesserungen für das Python-Paketmanagement. Ich habe UV selbst in einem Toy-Projekt getestet und bin jetzt schon sehr angetan. Die beschriebenen Vorteile in Bezug auf Performance, nahtlose Integration und Unabhängigkeit von Python sind definitiv keine leeren Versprechungen. Es gibt noch deutlich mehr Möglichkeiten mit UV, für mich sind zum Beispiel die Workspaces sehr interessant, da wir viele Projekte basierend auf unabhängigen Microservices haben, welche wir dann einheitlich verwalten könnten.
Wir planen, UV in unseren zukünftigen Projekten auszuprobieren und genau zu prüfen, ob die versprochenen Vorteile auch in realen Projekten erlebbar sind. Ebenso monitoren wir die weitere Entwicklung und sind gespannt auf weitere Ideen von Astral!
Torben Windler
Lead AI Engineer