Python-Modulmanager uv
Vor gut zweieinhalb Jahren habe ich hier über pip-Probleme berichtet, die unter aktuellen Ubuntu- und Debian-Systemen aufgetreten sind: externally-managed-environment (PEP 668) verhinderte lokale pip-Installationen wegen Konflikten zwischen System-Paketen. Die damals beschriebenen Lösungen, insbesondere das Einrichten eines virtuellen Environments, funktionieren weiterhin.
Aber inzwischen gibt es eine bessere Option: uv ist ein schneller, moderner Paketmanager für Python, der pip, venv, pipx und noch einige andere Tools auf einmal ersetzt. Wer regelmäßig Python-Module installiert, sollte sich die paar Minuten nehmen, uv kennenzulernen. Es lohnt sich.
Das pip-Problem
Zuerst eine kurze Wiederholung meines alten Artikels: Bei immer mehr Linux-Distributionen verhindert PEP 668, dass pip install systemweit Pakete installiert. Stattdessen erscheint die Fehlermeldung externally-managed-environment. Es gibt zwei Auswege: entweder installieren Sie das Python-Modul als Distributionspaket (falls verfügbar), oder sie richten ein Virtual Environment, also ein projektspezifisches Verzeichnis mit eigenen, isolierten Modul-Installationen.
Das Einrichten eines Virtual Environments mit python3 -m venv .venv ist nicht schwierig, aber umständlich. Man muss es bei jedem neuen Terminal-Fenster aktivieren (source .venv/bin/activate oder eine Variante dieses Kommandos für Zsh, Fish oder PowerShell), eine requirements.txt pflegen und bei der Weitergabe des Projekts dem Empfänger erklären, was er zu tun hat. uv macht das alles einfacher.
Was ist uv?
uv ist in der Programmiersprache Rust entwickelt worden und stammt von der Firma Astral. Im März 2026 hat OpenAI Astral übernommen; das Team arbeitet seitdem in der Codex-Abteilung. Ob und wie das die Weiterentwicklung von uv beeinflusst, ist noch nicht absehbar. Das Projekt bleibt aber Open Source (https://github.com/astral-sh/uv).
Was uv von pip unterscheidet:
- Es ersetzt
pip,venv,pip-tools,pipxundpyenvin einem einzigen Binary. - Es ist laut eigenen Benchmarks 10- bis 100-mal schneller als
pip. - Es verwaltet Abhängigkeiten in
pyproject.tomlund einer Lock-Datei. Das manuelle Pflegen vonrequirements.txtist damit vorbei.
Allein im Februar 2026 wurde uv über 126 Millionen Mal heruntergeladen. Es hat sich als De-facto-Standard für neue Python-Projekte etabliert. Auch bei meinen eigenen Python-Projekten ist uv inzwischen eine Selbstverständlichkeit geworden. Das Kommando ist einfach zu bedienen und funktioniert gut.
uv installieren
uv wird unabhängig von Python installiert. Unter macOS gelingt das am einfachsten mit Homebrew:
brew install uv
Bei manchen Linux-Distributionen steht uv als Paket zur Verfügung (apt install uv, dnf install uv). Falls nicht, funktioniert dieses Vorgehen:
curl -LsSf https://astral.sh/uv/install.sh -o uv_install.sh
less uv_install.sh # kurze Kontrolle
sh uv_install.sh
Das Script gibt am Ende Hinweise, wie .local/bin zur PATH-Variablen hinzuzufügen ist. Unter Windows führen Sie folgende PowerShell-Kommandos aus:
powershell -ExecutionPolicy ByPass `
-c "irm https://astral.sh/uv/install.ps1 | iex"
$env:Path = "C:\Users\<accountname>\.local\bin;$env:Path"
Nach der Installation überzeugen Sie sich kurz davon, dass alles geklappt hat:
uv --version
uv 0.11.19 (...)
Updates führen Sie mit brew upgrade uv (macOS) bzw. durch Wiederholung des Installations-Kommandos durch.
Weitere Installationstipps finden Sie auf der GitHub-Seite.
Neues Projekt einrichten
Nehmen wir an, Sie entwickeln ein Script, das die Module requests und beautifulsoup4 benötigt. Die folgenden Kommandos richten das Projekt ein:
uv init my-webscraper # erzeugt das Projektverzeichnis
cd my-webscraper # dorthin wechseln
uv add requests beautifulsoup4 # Module installieren
Falls es schon ein Projektverzeichnis gibt, wechseln Sie mit cd dorthin und führen uv init . aus. uv init erzeugt ein Projektverzeichnis mit folgender Struktur:
my-webscraper/
├── .gitignore
├── .python-version
├── .venv/
├── main.py
├── pyproject.toml
└── README.md
uv init kümmert sich also um das Virtual Environment im Verzeichnis .venv. uv add installiert das gewünschte Modul und trägt es in pyproject.toml ein.
Hinweis: Die Datei
.gitignorewird nicht erzeugt bzw. verändert, wenn das aktuelle Verzeichnis bereits unter Git-Kontrolle steht. In diesem Fall sollten Sie selbst in.gitignoreeine Regel einbauen, die das Verzeichnis.venvignoriert.
Ihr Script führen Sie mit uv run aus:
uv run main.py
uv run sorgt dafür, dass die richtige Python-Version und das Virtual Environment aktiv sind. Sie müssen sich um nichts weiter kümmern.
Weitere Module fügen Sie mit uv add hinzu, überflüssige entfernen Sie mit uv remove. Normalerweise verwendet uv einfach die gerade installierte Python-Version. Wenn Sie ausnahmsweise für ein Projekt eine andere Version benötigen, installieren und fixieren Sie diese:
uv python install 3.12
uv python pin 3.12
Projektweitergabe
uv pflegt mehrere Dateien für die Projektverwaltung:
pyproject.tomlenthält die Abhängigkeiten des Projekts.uv.lockenthält die exakten Versionsnummern aller installierten Module..python-versionenthält die gewünschte Python-Version.
Wenn Sie Ihr Projekt weitergeben oder auf einem anderen Rechner einsetzen möchten, geben Sie neben dem Quellcode die ersten beiden Dateien weiter, falls die Python-Version wichtig ist, auch die dritte. Die Empfängerin kann das Projekt dann sofort ausführen:
uv run main.py
uv erkennt pyproject.toml und uv.lock, richtet das Virtual Environment ein und installiert alle erforderlichen Module — vollautomatisch, ohne weitere Anweisungen.
Ältere Projekte mit requirements.txt
Bei bestehenden Projekten, die noch requirements.txt verwenden, bietet uv ebenfalls Unterstützung:
uv venv # Virtual Environment einrichten
uv pip install -r requirements.txt # Abhängigkeiten installieren
Bestehende Projekte auf uv migrieren
Wer ein vorhandenes Projekt von pip auf uv umstellen möchte, beginnt mit uv init --bare im Projektverzeichnis. Das Flag --bare verhindert, dass Beispieldateien erzeugt oder vorhandene Dateien überschrieben werden. Als Ergebnis erscheint eine minimale pyproject.toml. Im nächsten Schritt importieren Sie die bisherigen Abhängigkeiten aus requirements.txt:
cd my-project
uv init --bare
uv add -r requirements.txt
uv add -r requirements.txt trägt alle Module in pyproject.toml ein und erzeugt gleichzeitig uv.lock mit den exakten Versionsnummern. Mit uv sync installiert uv anschließend alle Module in einem neuen .venv-Verzeichnis — ohne manuelles Aktivieren der Umgebung. Ab jetzt führen Sie Ihr Script mit uv run aus.
Nach erfolgreicher Migration geben Sie künftig pyproject.toml und uv.lock weiter — requirements.txt können Sie löschen. Falls CI-Systeme oder Docker-Builds weiterhin eine requirements.txt benötigen, lässt sie sich jederzeit automatisch aus der Lock-Datei erzeugen:
uv export --format requirements-txt > requirements.txt
Python-Tools global installieren
uv ersetzt auch pipx: Mit uv tool install installieren Sie in Python entwickelte Kommandozeilen-Tools direkt auf Ihrem Rechner, außerhalb eines Projektverzeichnisses. Die Tools landen in .local/share/uv/tools, Links dazu werden in .local/bin angelegt:
uv tool install httpie
httpie --version
3.2.4
Noch praktischer ist uvx: Damit führen Sie ein Tool aus, ohne es permanent zu installieren. uv lädt die erforderlichen Dateien in ein Cache-Verzeichnis und führt das Tool sofort aus — ideal für die gelegentliche Nutzung:
uvx ruff check . # überprüft alle Python-Dateien im Verzeichnis
Mit uv cache clean löschen Sie bei Bedarf die zwischengespeicherten Dateien.
Quellen/Links
- https://peps.python.org/pep-0668
- https://docs.astral.sh/uv
- https://docs.astral.sh/uv/guides/migration/pip-to-project/
- https://github.com/astral-sh/uv
- https://simonwillison.net/2026/Mar/19/openai-acquiring-astral
- https://dasroot.net/posts/2026/05/uv-openai-python-supply-chain-acquisition-risks/
- https://kofler.info/hilfe-pip-funktioniert-nicht-mehr/