Projektverwaltung mit uv
21. Nov. 2025
Vor einiger Zeit habe ich einen Beitrag veröffentlicht, in dem erklärt wurde, wie man eine portable Entwicklungsumgebung in Python mit venv erstellt und verwaltet. In Kombination mit pyenv kann man so für eine gewünschte Version von Python Module und Pakete installieren.
uv ist eine extrem schneller Verwalter von Abhängigkeiten und Umgebungen für die Entwicklung mit Python. In diesem Beitrag fasse ich zusammen, wie man uv installiert und wie man es benutzt.
Setup
Am einfachsten installiert man uv mit Homebrew:
brew install uv
Aber auch eine direkte Installation is möglich:
curl -LsSf https://astral.sh/uv/install.sh | sh
Verwendung
Um die Vorteile bei der Verwendung von uv hervorzuheben, wird später kurz die alte Herangehensweise gezeigt, mit der man Abhängigkeiten in einer Python-Umgebung verwaltet, und wie man ein so eingerichtetes Projekt in ein uv-Projekt migriert.
Herangehensweise mit uv
Ein neues Projekt kann initialisiert werden mit:
uv init APP_NAME
Alternativ kann ein uv-Projekt in einem bereits existierenden Ordner initialisiert werden, indem man in den Ordner navigiert und dort dann denselben Befehl aber ohne Projektnamen eingibt:
uv init
Somit wird ein einfaches Python-Projekt erstellt, inklusive Versionsverwaltung mit git (im Ordner .git) und Umgebungsverwaltung (im Ordner .venv). Beim Initialisieren können auch Argumente angegeben werden, wie z.B.:
--appmit der eine Anwendung erzeugt wird, oder--libmit der eine teilbare Bibliothek erstellt wird.
Neue Abhängigkeiten werden dann installiert mit:
uv add xxxx
Abhängigkeiten zu löschen geht mit:
uv remove xxx
Die installierten Abhängigkeiten wurde nun installiert und in der Datei pyproject.toml angegeben, sodass die uv-Umgebung geteilt werden kann. Die Abhängigkeiten können auch eingesehen werden, mit:
uv tree
Ausgeführt wird Code durch uv mit:
uv run main.py
Löscht man nun die virtuelle Umgebung (also den Ordner .venv), kann uv den Code weiterhin ausführen, da es automatisch (unter Bezug auf die Datei project.toml) alle Abhängigkeiten neu in eine virtuelle Umgebung installiert.
Möchte man die virtuelle Umgebung automatisch einrichten, ohne den Code ausführen zu müssen, tut man dies mit:
uv sync
Um eine bestimmte Version von Python zu installieren verwendet man:
uv python install 3.10 3.11 3.12
Und die zu verwendende Version kann dann ausgewählt werden, mit:
uv python pin 3.11
Verfügbare Versionen von Python können so abgefragt werden:
uv python list
Die alte Herangehensweise
Eine virtuelle Umgebung wird erstellt mit:
python -m venv .venv
Sie wird aktiviert mit:
source .venv/bin/activate
Abhängigkeiten werden über pip in die nun aktivierte Umgebung installiert mit:
pip install xxxx
Um die installierten Abhängigkeiten für spätere Reproduzierbarkeit zu speichern, verwendet man den folgenden Befehl:
pip freeze > requirements.txt
Die so erhaltene Datei kann Abhängigkeiten in eine (insbesondere in eine noch nicht eingerichtete) Umgebung installieren, mit:
pip install -r requirements.txt
Code (z.B. in einer Datei namens main.py) wird dann ausgeführt, mit:
python main.py
Und die Umgebung kann deaktiviert werden mit:
deactivate
Möchte man die Python version ändern, muss z.B. pyenv installiert werden, sodass dann die gewünschte Version installiert und aktiviert werden kann, um dann die virtuelle Umgebung (.venv) wie vorstehend beschrieben neu einzurichten.
Migration zu uv
Hat man eine nur mit pip (oder uv pip) eingerichtetes Projekt, kann man es zu uv migrieren, indem man zuerst ein uv-Projekt initialisiert:
uv init
Danach können alle Abhängigkeiten installiert werden, mit:
uv add -r requirements.txt
Die Date requirements.txt ist dann nicht mehr nötig und kann gelöscht werden.