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.:

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.