Eines der stichhaltigsten und langlebigsten Argumente gegen Python ist sein chaotisches Packaging-Ökosystem. Ein Beitrag auf dem Webcomic-Portal xkcd.com bringt die Zustände präzise auf den Punkt:
Zwar hat sich die Situation im Laufe der Zeit verbessert - sie ist aber immer noch weit entfernt von "ideal". Drittanbieter-Tools wie Poetry und pipenv, die auf den existierenden Python-Standards aufbauen, haben versucht, die Lücken zu füllen. Allerdings sind sie auf "elegantere" Workflows ausgelegt.
Mit uv
steht nun eine neue Ergänzung für das Package-Installations-Ökosystem von Python zur Verfügung. Das Tool wurde von Astral entwickelt und soll einen All-in-One-Ersatz für pip
, venv
und viele andere Kommandozeilen-basierte Python-Projektmanagement-Tools darstellen. Dabei hebt es sich im Wesentlichen dadurch ab, dass es vorwiegend in Rust geschrieben ist - was es im Vergleich mit der Konkurrenz um mehrere Größenordnungen schneller machen soll.
In diesem Artikel lesen Sie, wie Sie erste Schritte mit uv gehen - und wo das Python-Tool an seine Grenzen stößt.
uv einrichten
Um uv zu installieren, gibt es mehrere Wege. Eine simple Option ist es dabei, auf pip
zurückzugreifen und das Tool einer existierenden Python-Installation hinzuzufügen. Wenn sich letztgenannte im System-PATH
befindet, rufen Sie das Tool einfach auf, indem Sie uv
in die Kommandozeile eingeben.
Sobald das Tool installiert ist, lässt sich über den Befehl uv venv
eine virtuelle Umgebung in einem spezifizierten Verzeichnis erstellen. Wenn Sie dabei selbst keinen Verzeichnisnamen angeben, wird diese im .venv
-Verzeichnis erstellt.
Die von uv erstellte venv
verhält sich ebenso wie eine "normale" virtuelle Umgebung - mit einigen Anpassungen: Weder pip
noch setuptools
sind standardmäßig installiert. Für ein uv
-gemanagtes Python-Projekt sollten Sie wann immer möglich die Management-Tools von uv
nutzen.
pip mit uv nutzen
uv
unterhält seine eigene pip
-Version, die Sie explizit aufrufen. Der Befehl ist identisch:
uv pip install flask
uv
unterstützt zudem die große Mehrheit der üblichen pip
-Verhaltensweisen - beispielsweise editierbare Installationen, optionale Komponentenauswahl (uv pip install "flask[dotenv]"
) oder die Installation aus einer git
-Quelle.
"uv pip" mit Git nutzen
Wenn Sie eine Anforderung aus einem Git-Repository oder GitHub installieren möchten, unterscheidet sich die Syntax im Vergleich zu pip
: Sie müssen den Namen des zu installierenden Pakets und anschließend die Quelle angeben:
uv pip install "<package_name> @ https://github.com/<user>/<repo>"
Beachten Sie dabei die Anführungszeichen, die erforderlich sind, um das @
richtig zu entschlüsseln. Auch für die Authentifizierung über git
-Links ist eine spezielle Syntax erforderlich.
"uv pip freeze" statt "pip list" verwenden
Um aufzulisten, was in einem bestimmten venv installiert ist, verwenden Sie zudem den Befehl uv pip freeze
anstelle von uv pip list
. Die Ergebnisse können in eine Datei umgeleitet werden, wie Sie es normalerweise mit pip freeze
bewerkstelligen würden.
Abhängigkeiten managen mit uv
uv
bietet mehrere Funktionen, um Abhängigkeiten innerhalb einer Projekt-Anforderungsliste festzulegen und zu synchronisieren. Wenn Sie uv pip freeze
verwenden, wird die resultierende Liste explizite Versionsanforderungen für jedes Paket aufweisen - was zur Folge hat, dass sie auf die spezifischen Versionen festgelegt ("locked") ist.
Wenn Sie auf Grundlage bestehender pyproject.toml
- oder requirements.in
-Dateien ein festgelegtes Dependency-Set als requirement.txt
generieren wollen, nutzen Sie dazu:
uv pip compile pyproject.toml -o requirements.txt
oder
uv pip compile requirements in -o requirements.txt
pip-compile und pip-sync mit uv nutzen
Langfristig haben sich die Entwickler von uv
zum Ziel gesetzt, mit ihrem Tool eine Alternative zu gleich mehreren Python-Tools zu kreieren. Zwei, die uv
derzeit bereits ersetzen kann (zumindest auf rudimentäre Art und Weise), sind:
pip-compile
undpip-sync
.
pip-sync
synchronisiert das Package-Set einer virtuellen Umgebung mit einer Liste von Paketen - für gewöhnlich einer requirements.txt
-Datei. Um die in einem Projekt installierten Abhängigkeiten mit einer Liste festgelegter Dependencies auf ähnliche Weise wie mit dem pip-sync
-Tool zu synchronisieren, verwenden Sie:
uv pip sync requirements.txt
pip-compile
erzeugt eine requirements.in-Datei, die "gesperrte" Abhängigkeiten aus einer bestehenden pyproject.toml
- oder requirements.txt
-Datei aufistet:
uv pip compile .\pyproject.toml -o requirements.in
Das speichert die in pyproject.toml
aufgeführte "version-locked"-Liste von Abhängigkeiten in requirements.in
- die anschließend genutzt werden kann, um spezifische Anforderunegn für bestimmte Konfigurationen wiederherzustellen.
uv-Limitationen
Das uv
-Projekt steckt noch in den Kinderschuhen und kann insofern noch nicht mit vollem Funktionsumfang glänzen - diverse Features sind unvollständig, andere sollen später folgen.
Zudem ist es nicht nur von Vorteil, dass uv
in Rust geschrieben ist. Das macht das Tool zwar schnell und effizient, allerdings könnte der Umstand, Rust erst erlernen zu müssen, mit Blick auf zukünftige Kontributionen aus der Python-Community hinderlich sein. Weil in Rust geschriebene Python-Tools noch ein relativ neues Phänomen sind, lässt sich derzeit noch nicht abschätzen, welchen Einfluss dieser Punkt auf die Zukunft des Python-Tools haben wird. Eines steht jedoch bereits fest: Soll der Fokus auf Performance liegen, ist Rust eine gute Wahl für Python-Tools. (fm)
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.