Die Einführung von uv hat meine Arbeitsweise mit Python erheblich vereinfacht. Anstatt mehrere verschiedene Werkzeuge für Paketinstallationen, virtuelle Umgebungen, Lock-Dateien und die Verwaltung von Python-Versionen zu nutzen, bietet uv eine schnelle und effiziente Lösung.
Die Herausforderungen der Python-Paketverwaltung
Die Verwaltung von Python-Paketen war für mich stets eine Herausforderung. In einem Projekt installierte ich Pakete global, weil ich vergaß, eine virtuelle Umgebung zu erstellen. In einem anderen Fall aktivierte ich die venv nicht und installierte erneut Pakete global.
Für größere Projekte wechselte ich zu Poetry, um Abhängigkeiten zu verwalten, Pakete zu erstellen und Lock-Dateien zu generieren. Obwohl es ein leistungsfähiges Werkzeug ist, erschien mir Poetry im Vergleich zu pip oft langsamer und schwerfälliger für die Art von Projekten, die ich entwickelte.
Diese Werkzeuge sind nicht schlecht; sie sind aus gutem Grund beliebt. Pip ist der Standard-Paketmanager für Python, venv hilft bei der Erstellung isolierter Umgebungen, und Poetry bietet eine umfassende Abhängigkeitsverwaltung sowie reproduzierbare Lock-Dateien. Doch nach der Nutzung von uv stellte ich mir eine einfache Frage:
„Warum nutze ich drei verschiedene Werkzeuge, wenn eines die meisten Aufgaben erledigen kann?“
Was ist uv?
Uv ist ein schneller Paket- und Projektmanager für Python, entwickelt von Astral, dem gleichen Team, das hinter Ruff steht. Die einfachste Art, uv zu verstehen, ist, dass es die Funktionen von mehreren Werkzeugen in einem vereint. Anstatt verschiedene Werkzeuge für Paketinstallationen, virtuelle Umgebungen, Lock-Dateien und die Verwaltung von Python-Versionen zu verwenden, bündelt uv die meisten dieser Arbeitsabläufe an einem Ort.
Es kann Werkzeuge wie pip, pip-tools, pipx, Poetry, pyenv, twine und virtualenv für viele gängige Python-Arbeitsabläufe ersetzen. Zudem ist es deutlich schneller als die herkömmlichen Setups. Laut den Benchmarks von Astral ist uv 10-100 Mal schneller als pip und unterstützt das Projektmanagement, erstellt Lock-Dateien, verwaltet Python-Versionen und bietet gleichzeitig eine vertraute, pip-kompatible Schnittstelle.
Das klingt nach einer großen Behauptung, aber im täglichen Gebrauch liegt der Hauptvorteil auf der Hand:
„Uv macht die Einrichtung von Python-Projekten schneller, sauberer und weniger frustrierend.“
Mein alter Python-Arbeitsablauf
Vor der Nutzung von uv sah mein Python-Arbeitsablauf in der Regel so aus:
- Erstellen einer virtuellen Umgebung:
python -m venv .venvsource .venv/bin/activate
Unter Windows aktivierte ich sie mit:
.venv\\Scripts\\Activate.ps1
- Installation der benötigten Pakete:
pip install pandas scikit-learn streamlitpip freeze > requirements.txt
Für größere Projekte wechselte ich in der Regel zu Poetry:
poetry initpoetry add pandas scikit-learn streamlitpoetry run python main.py
Das funktionierte, aber es fühlte sich immer an, als würde ich zwischen verschiedenen Werkzeugen und Arbeitsabläufen hin und her springen.
Manchmal hatte ich eine requirements.txt-Datei, manchmal eine pyproject.toml-Datei, manchmal eine Lock-Datei. Gelegentlich vergaß ich, die virtuelle Umgebung zu aktivieren, und installierte Pakete versehentlich global.
All dies war nicht unmöglich zu verwalten, aber es war auch nicht sauber. Ich wünschte mir einen Arbeitsablauf, der schneller, einfacher und konsistenter über kleine Skripte, Datenwissenschaftsprojekte und größere Python-Anwendungen hinweg war.
Mein neuer Arbeitsablauf mit uv
Mit uv fühlt sich der Start eines neuen Python-Projekts viel einfacher an. Ich kann ein Projekt erstellen, Abhängigkeiten hinzufügen und den Code mit nur wenigen Befehlen ausführen:
uv init my-projectcd my-projectuv add pandas scikit-learn streamlituv run main.py
Das war’s. Wenn ich diese Befehle ausführe, kümmert sich uv um den Großteil der Einrichtung für mich. Es erstellt die Projektstruktur, verwaltet die Abhängigkeiten in pyproject.toml, erstellt eine .venv-Umgebung und generiert eine uv.lock-Datei für reproduzierbare Installationen.
Anstatt manuell eine virtuelle Umgebung zu erstellen, sie zu aktivieren, Pakete zu installieren und Abhängigkeiten zu speichern, kann ich uv die gesamte Arbeitsabläufe überlassen.
Der beste Teil ist, dass ich die Umgebung nicht jedes Mal aktivieren muss. Stattdessen kann ich einfach:
uv run script.py
uv run überprüft, ob die Umgebung mit der Lock-Datei synchronisiert ist, und führt dann den Befehl mit den richtigen Abhängigkeiten aus.
Für mich ist dies die größte Verbesserung der Lebensqualität. Ich verbringe weniger Zeit mit der Verwaltung von Umgebungen und mehr Zeit mit dem tatsächlichen Aufbau des Projekts.
Warum ich uv schätze
Der Hauptgrund, warum ich uv schätze, ist, dass es viele kleine Ärgernisse aus der täglichen Python-Entwicklung entfernt.
Die Python-Arbeitsabläufe in einem Werkzeug bündeln
Das ist der größte Grund, warum ich gewechselt habe. Vor uv war mein Arbeitsablauf auf verschiedene Werkzeuge verteilt. Ich verwendete pip zur Installation von Paketen, venv oder virtualenv zur Erstellung von Umgebungen, pip freeze zur Generierung einer requirements.txt-Datei, Poetry für größere Projekte und manchmal pyenv zur Verwaltung von Python-Versionen.
Jedes Werkzeug löste ein anderes Problem, aber zusammen fühlte sich der Arbeitsablauf zerstreut an.
Mit uv kann das meiste an einem Ort geschehen:
uv inituv add requestsuv add --dev pytestuv run pytest
Dies schafft einen saubereren Arbeitsablauf. Ich kann das Projekt erstellen, Abhängigkeiten hinzufügen, die Umgebung verwalten, eine Lock-Datei generieren und Befehle ausführen, ohne ständig zwischen Werkzeugen wechseln zu müssen.
Das ist der wahre Vorteil für mich. Uv ist nicht nur ein schnelleres pip. Es bietet mir eine konsistente Möglichkeit, Python-Projekte zu verwalten.
Schnelligkeit
Schnelligkeit ist nicht alles, aber sie ist wichtig, wenn man immer wieder Projekte erstellt. Die Installation von Abhängigkeiten mit pip kann langsam erscheinen, insbesondere in frischen Umgebungen oder CI-Pipelines. Uv ist in Rust geschrieben und für Geschwindigkeit optimiert, und in meinem eigenen Arbeitsablauf ist dieser Unterschied spürbar.
Die Projekteinrichtung fühlt sich mit uv viel schneller an, insbesondere für Projekte, die schwerere Abhängigkeiten wie transformers, torch, scikit-learn oder andere Datenwissenschafts- und Machine-Learning-Pakete benötigen.
Ein weiterer Aspekt, den ich schätze, ist, dass ich mir nicht so viele Gedanken über die Auflösung von Abhängigkeiten machen muss. Uv kümmert sich um die Umgebung, löst Abhängigkeiten auf, aktualisiert die Lock-Datei und hält alles automatisch synchron.
Im normalen Arbeitsalltag bedeutet dies weniger Wartezeiten, weniger Einrichtungsprobleme und mehr Zeit für den eigentlichen Aufbau.
Die Projekteinrichtung sauberer gestalten
Mit uv fühlt sich der Projektfluss moderner an:
uv inituv add fastapiuv add --dev pytestuv run pytest
Dies hält die Abhängigkeiten in pyproject.toml, erstellt eine Lock-Datei und erleichtert die Reproduzierbarkeit des Projekts auf einem anderen Rechner.
Anstatt jemandem zu sagen:
„Erstelle eine virtuelle Umgebung, aktiviere sie, installiere die Anforderungen und stelle sicher, dass die Python-Version korrekt ist.“
Kann man oft einfach sagen:
„uv sync
uv run main.py“
Das ist viel sauberer.
Migration erleichtern
Ein weiterer Grund, warum ich uv schätze, ist, dass ich nicht alles auf einmal ändern muss. Wenn ich ein älteres Projekt habe, das noch eine requirements.txt-Datei verwendet, kann ich uv nutzen, ohne das gesamte Projekt in den vollständigen uv-Arbeitsablauf zu konvertieren.
Beispielsweise:
uv venvsource .venv/bin/activateuv pip install -r requirements.txt
Unter Windows kann ich die Umgebung mit:
.venv\\Scripts\\Activate.ps1
aktivieren und dann die Abhängigkeiten installieren:
uv pip install -r requirements.txt
Dies ist nützlich, da die Migration nicht alles oder nichts sein muss. Ich kann damit beginnen, uv als schnelleren Installer in bestehenden Projekten zu verwenden und dann uv init, uv add und uv sync für neue Projekte nutzen.
Das macht uv einfach schrittweise zu übernehmen, anstatt am ersten Tag einen vollständigen Wechsel des Arbeitsablaufs zu erzwingen.
Verwaltung von Python-Versionen
Ein weiteres nützliches Feature ist, dass uv auch Python-Versionen installieren und verwalten kann. Das bedeutet, dass es für viele Nutzer auch Teile eines pyenv-Arbeitsablaufs ersetzen kann.
Ich kann beispielsweise eine bestimmte Python-Version installieren:
uv python install 3.12
Und dann mein aktuelles Projekt auf diese Version festlegen:
uv python pin 3.12
Danach kann ich die Umgebung wie gewohnt erstellen oder synchronisieren:
uv sync
So kann ich die Verwaltung von Python-Versionen, virtuellen Umgebungen und Abhängigkeiten in einem Werkzeug bündeln.
Installation von uv
Die Installation von uv ist unkompliziert. Öffnen Sie Ihr Terminal oder PowerShell und führen Sie den Befehl für Ihr Betriebssystem aus.
- Für macOS und Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Für Windows PowerShell:
irm https://astral.sh/uv/install.ps1 | iex
Das ist der einfachste Weg, uv mit dem offiziellen Standalone-Installer zu installieren. Sie können uv auch mit pip, Homebrew, WinGet, Scoop, Docker, Cargo und anderen Methoden installieren. Für die meisten Nutzer ist der Standalone-Installer jedoch die einfachste Option.
Sollten Sie zu uv wechseln?
Für neue Python-Projekte halte ich uv für eine einfache Empfehlung. Es ist schnell, modern und vereint die Projektkonfiguration, Abhängigkeitsverwaltung, virtuelle Umgebungen, Lock-Dateien, Python-Versionen und die Ausführung von Werkzeugen in einem Arbeitsablauf. Die Dokumentation besagt auch, dass uv eine vertraute pip-kompatible Schnittstelle bietet, sodass Sie mit uv pip beginnen können, bevor Sie vollständig zu uv init, uv add und uv sync wechseln.
Allerdings würde ich nicht jedem raten, sofort zu wechseln. Für Anfänger in der Datenwissenschaft ist conda nach wie vor ein guter Ausgangspunkt, da es weit verbreitet ist für die Verwaltung von Umgebungen und Paketen in Datenwissenschafts-Workflows.
Für Programmierer, die KI-Codetools verwenden, sind pip, venv und requirements.txt nach wie vor wichtig, da viele KI-Modelle auf älteren Python-Workflows trainiert wurden und möglicherweise Anweisungen generieren, die nicht reibungslos mit uv funktionieren.
Für Python-Entwickler, Produktingenieure und Personen, die häufig Projekte einrichten, empfehle ich jedoch dringend, uv auszuprobieren. Es bietet Ihnen einen saubereren Arbeitsablauf und umfasst auch uvx, das wie npx für Python-Werkzeuge funktioniert. Sie können Python-basierte CLI-Tools in isolierten temporären Umgebungen ausführen, ohne sie global installieren zu müssen.
Meine Empfehlung ist einfach: Behalten Sie conda, wenn Sie gerade erst mit der Datenwissenschaft beginnen, lernen Sie pip, da es nach wie vor überall verwendet wird, aber nutzen Sie uv für neue Python-Projekte, bei denen Sie ein schnelleres und saubereres Entwicklererlebnis wünschen.
Quellen: kdnuggets
Bildquelle: KI generiert
🚀