- uv vereinfacht die Installation von Python und die Verwaltung virtueller Umgebungen grundlegend und löst die Probleme komplexer Umgebungskonfigurationen im Python-Ökosystem
- Es ist in Rust geschrieben und bietet sowohl Geschwindigkeit als auch Stabilität; Python-Versionsinstallation, Paketverwaltung und Abhängigkeitsauflösung werden mit einem einzigen Befehl erledigt
- Es erkennt
pyproject.tomlautomatisch und richtet die Projektumgebung ein; mituv synclässt sich eine vollständig identische Entwicklungsumgebung im Team reproduzieren - Mit Befehlen wie
uv run,uv addunduvxsind Ausführung ohne Aktivierung einer virtuellen Umgebung sowie das Hinzufügen von Paketen und einmalige Ausführungen möglich - Durch konsistente Python-Installation und -Ausführung gilt uv als Wendepunkt, der die Produktivität von Entwicklern und die Effizienz der Zusammenarbeit deutlich steigert
Überblick über uv
- uv ist ein von Astral entwickeltes kostenloses Open-Source-Tool zur Python-Verwaltung, das die komplexen Schritte der Umgebungskonfiguration vereinfachen soll
- Astral ist das Team hinter Python-Entwicklungswerkzeugen wie Ruff
- uv unterstützt die Installation von Python-Versionen, Paketinstallation, Verwaltung virtueller Umgebungen und Abhängigkeitsauflösung und ist in puncto Geschwindigkeit deutlich schneller als bestehende Tools
- Es wurde in Rust entwickelt, bietet sehr hohe Leistung und läuft auf nahezu allen Plattformen wie macOS, Linux und Windows
Installation und grundlegende Nutzung
- Die Installation ist sehr einfach und lässt sich mit einer einzigen
curl- oder PowerShell-Zeile ausführen- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh - Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Linux/Mac:
- Da bestehende Python-Installationen nicht verändert werden, kann man es gefahrlos ausprobieren
Verwaltung von Projektumgebungen
- uv verwaltet für jedes Python-Projekt virtuelle Umgebungen automatisch und richtet die Umgebung anhand der Datei
pyproject.tomlein- In
pyproject.tomlwerden Python-Version, Liste der Abhängigkeiten sowie Projektname und -version definiert - Beispiel:
[project] name = "my_project" version = "1.0.0" requires-python = ">=3.9,<3.13" dependencies = ["astropy>=5.0.0", "pandas>=1.0.0,<2.0"] - Dieser Ansatz bietet im Vergleich zu pip eine klarere und stärker standardisierte Definition der Umgebung
- In
Neues Projekt erstellen
- Mit dem Befehl
uv initlässt sich einfach ein neues Projekt erzeugen- Dabei werden automatisch notwendige Dateien wie
pyproject.tomlundREADME.mderstellt - Mit Optionen wie
--bareund--packagewerden verschiedene Initialisierungsformen unterstützt - Details zu den Optionen lassen sich mit
uv init --helpanzeigen
- Dabei werden automatisch notwendige Dateien wie
Bestehendes Projekt synchronisieren
- Wenn ein Projekt bereits eine
pyproject.tomlenthält, kann es sofort mit dem Befehluv syncverwendet werden- Die passende Python-Version wird automatisch installiert
- Im Verzeichnis
.venvwird eine virtuelle Umgebung erstellt - Es wird eine
uv.lockerzeugt, die die exakten Versionsinformationen aller Pakete festhält
- Mit dem Befehl
uv runlassen sich Python-Skripte auch ohne Aktivierung der Umgebung ausführen- Beispiele:
uv run myscript.py,uv run jupyter lab
- Beispiele:
Verwaltung von Abhängigkeiten und Python-Versionen
- Mit dem Befehl
uv add numpy>=2.0lassen sich Abhängigkeiten automatisch hinzufügen und verwaltenpyproject.tomlmuss dafür nicht direkt bearbeitet werden
- Mit dem Befehl
uv python pin 3.12.9kann eine bestimmte Python-Version festgeschrieben werden, was die Reproduzierbarkeit der Umgebung sicherstellt
uvx: schnelle einmalige Ausführung
uvxist ein Befehl, mit dem sich Tools ohne separate Umgebungseinrichtung sofort ausführen lassen- Beispiele:
uvx ruff,uvx jupyter lab,uvx --with pandas,pyarrow ipython - Dank Cache-basiertem Ansatz sind erneute Ausführungen extrem schnell, was für experimentelle Arbeiten nützlich ist
- Beispiele:
- Dadurch können Entwickler temporäre Laufzeitumgebungen unkompliziert einrichten, ohne an virtuelle Umgebungen gebunden zu sein
Falls dich das immer noch nicht überzeugt: eine persönliche Notiz
- Bei der Entwicklung von The Astrosky Ecosystem wurde uv eingeführt, um Python-Umgebungen über mehrere Betriebssysteme hinweg zu vereinheitlichen
- Es hilft dabei, dass alle Entwickler und Server exakt dieselben Python-Installationen und Abhängigkeitsversionen verwenden
- Auch in GitHub Actions und auf Produktionsservern verwaltet uv die Python-Umgebung
- Dank uv sind Probleme durch Unterschiede zwischen Installations- und Testumgebungen verschwunden, und die Zusammenarbeit zwischen Entwicklern wurde einfacher
Fazit
- uv beseitigt die Komplexität der Python-Installation und -Verwaltung grundlegend und ermöglicht Entwicklern eine stabile Zusammenarbeit in identischen Umgebungen
- Dank hoher Geschwindigkeit und der Stabilität durch Rust wird uv als „größte Innovation im Python-Ökosystem der letzten zehn Jahre“ bewertet
7 Kommentare
Ich dachte,
pdmseiuvfast sehr ähnlich, aber man hört nicht viel überpdm.Bei Beiträgen über uv scheint sich der Inhalt inzwischen kaum noch wesentlich zu ändern.
Maven und Gradle auch..
Hacker-News-Kommentare
Früher hieß es immer, das Python-Tooling sei gut genug, aber jetzt, wo Python-Entwickler ein lockfile-basiertes Ökosystem wie bei npm, cargo oder bundler erlebt haben, ist es befriedigend zu sehen, dass sie die Vorteile erkennen.
npm hat auch Probleme, aber konsistente Installationen und Lockfiles sind wirklich ein großartiges Konzept.
Erstaunlich, dass das Umgebungsmanagement so lange so unbequem war.
Ob die vielen gescheiterten Versuche einfach an der Schwierigkeit der Paketverwaltung lagen oder ob es VC-Finanzierung brauchte.
pip freeze > requirements.txtundpip install -r requirements.txt.Wenn man keine Versionsbereiche verwendet, fungiert requirements.txt faktisch als Lockfile.
Deshalb wirkt der aktuelle Hype um das „offizielle Lockfile“ auf mich etwas übertrieben.
Ich denke, dass npm sich vor allem durch das Auftauchen von yarn verbessert hat.
Es ist schneller, effizienter und deterministisch.
Mehr dazu unter pnpm.io/motivation
Mit UV-Skripten konnte ich MCP-Client/Server als einzelne Datei bereitstellen.
Zugehöriger Beitrag: MCP server in a file
Die meisten Skripte bestehen aus nur einer Datei; wenn man oben den folgenden Code ergänzt, wird das Leben viel einfacher.
#!/usr/bin/env -S uv run --scriptDann verhält sich das Skript wie eine eigenständig ausführbare Datei, und uv installiert die benötigten Module automatisch.
weil der Autor des Skripts bösartige Abhängigkeiten verstecken könnte.
Eine Whitelist-Funktion wäre wünschenswert.
Einige Pakete lassen sich allerdings nicht nach Release-Datum erkennen (z. B. yaml).
/usr/bin/env -Smuss unterstützt werden, und für die Abhängigkeitsnamen müssen die Distributionspaketnamen verwendet werden, wie sie auch beiuv pip installgenutzt werden.Das ist der Standard PEP 723, den auch pipx unterstützt.
Vor uv hatte ich kein Interesse an Rust, aber dank uv verlagere ich nun performancekritischen Code nach Rust.
Ich wünschte, conda würde ganz verschwinden. In ML-Clustern werden conda-Umgebungen viel zu groß und die Reproduzierbarkeit leidet.
Früher war ich mit der Kombination aus pyenv + venv + pip + pipx völlig zufrieden, aber uv bietet
uv run,uv addusw.,Statt eine Umgebung zu aktivieren, ist es viel bequemer, vor den Befehl einfach
uvzu setzen.Auch das Python-Versionsmanagement wird einfacher, und pro Projekt hat es etwas von einem batteries-included-Gefühl.
Ob es langfristig stabil ist, weiß ich noch nicht, aber für neue Projekte nutze ich es inzwischen standardmäßig.
Manche mögen es nicht, dass uv die Umgebung automatisch erkennt.
Ich sehe den Wert des Python-Versionsmanagements nicht ganz, aber mit uv geht das Neuerstellen von Umgebungen viel schneller.
uvlassen sich Befehle stateless ausführen, was die Zusammenarbeit erleichtert.uv-Präfix bleibt trotzdem nützlich..venv.Dieser Blogpost deckt sich fast vollständig mit meinen Erfahrungen.
Weniger Reibung, mehr Einfachheit.
Ich hoffe, dass die Python-Community uv als Standardwerkzeug übernimmt.
Rust-basierte Tools haben die Geschwindigkeit der Rückkopplungsschleife komplett verändert.
Ich frage mich allerdings, wie Astral Geld verdient. Sie haben Investitionen erhalten, aber kein kostenpflichtiges Produkt.
Zum Beispiel ein internes Paket-Registry-System.
Zugehöriges Interview: Charlie Marsh Interview
Wenn es 10 Millionen Python-Entwickler gibt, dürfte uv gut monetarisierbar sein.
Persönlich halte ich Typannotationen und die Abschaffung des GIL für wichtiger als uv.
uv ist noch in einer frühen Phase und hat auch Unannehmlichkeiten. Am Ende ist es eben noch ein weiterer Paketmanager.
Vor allem der neue Resolver von pip und die größere Verbreitung von Wheel-Distributionen haben viel bewirkt.
Siehe dazu: Wheels are faster for pure Python
Dass es in Rust geschrieben ist, ist ebenfalls interessant. Wie LLVM hat es eine Struktur, die auch andere Sprachen unterstützen könnte.
Aus Sicht der Endnutzer ist uv deutlich besser, und wenn es für Maintainer unbequem ist, kann man dazu Feedback geben.
Mit einem Strict Mode wären vielleicht auch Performanceverbesserungen möglich, das würde aber der Sprachphilosophie widersprechen.
Wenn conda tatsächlich verschwinden würde, wäre ich dennoch bereit, zu uv zu wechseln.
Ich mag uv nicht.
uv pipverwenden, also ist es nicht einmal ein vollständiger Ersatz.Allerdings gehen auch pip und venv oft kaputt, und das Debugging wird dadurch noch schwieriger.
uv ersetzt ruff nicht.
An den Umgebungsvariablen muss man gar nichts ändern.
uv pipruft pip nicht auf, sondern bietet eine kompatible Schnittstelle.Tatsächlich ersetzt uv pip.
Ich frage mich, welche Docker-Kompatibilitätsprobleme konkret gemeint sind.
uv add,uv syncunduv runist die Verwaltung viel ergonomischer und schneller.Ausführliche Dokumentation: uv dependencies concepts
uvist zwar angenehm schnell, aber ich frage mich auch, ob es nicht besser gewesen wäre, stattdessenpipzu verbessern.Ich nutze es in ML und im Web sehr gern und hoffe, dass uv schnell zu einer langweiligen Standardtechnologie wird haha
Wenn man ein Repo sieht, das nur
requirementshat und keinpyproject.toml, wirkt es inzwischen schon altmodisch, haha;