Python-Package-Installer-Tutorial

So nutzen Sie uv

18.03.2024
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.
Der Python Package Installer uv soll künftig nicht nur pip und venv ersetzen.
Python Packages lassen sich mit uv schneller händeln. So geht's.
Python Packages lassen sich mit uv schneller händeln. So geht's.
Foto: slavchovr | shutterstock.com

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 und

  • pip-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.