Bei uv handelt es sich um einen in Rust geschriebenen Paketmanager, der eine Alternative zu pip
darstellt. Mit ihm kann ein Projekt isoliert werden, d.h. die mit uv
installierten Pakete stehen nur dem jeweiligen Python-Projekt zur Verfügung. Damit ist es also möglich, für verschiedene Projekte unterschiedliche Paketversionen zu installieren. Wenn mit uv
ein Paket installiert wird, richtet der Paketmanager automatisch eine virtuelle Umgebung ein und verwaltet sie auch. Letztendlich lässt sich also sagen, dass mit uv
die Funktionalität eines Paketmanagers und einer virtuellen Umgebung in einem Programm vereint wird.
Installation
Für die Installation von uv
stehen unter macOS verschiedene Wege zur Verfügung. Zum einen kann mithilfe von curl
oder wget
die Standalone-Version heruntergeladen bzw. installiert werden. In der Regel wird man curl
verwenden, da es standardmäßig auf dem Mac installiert ist, während wget
zum Beispiel mit Homebrew erst installiert werden muss.
Installation mit curl:
curl -LsSf https://astral.sh/uv/install.sh | sh
Installation mit wget:
wget -qO- https://astral.sh/uv/install.sh | sh
Diejenigen von euch, die Homebrew installiert haben, können hierüber ebenfalls uv
installieren:
brew install uv
Außerdem stehen auch pip
und cargo
als Installationsmethoden zur Verfügung. Wenn ihr cargo
verwenden möchtet, muss auf eurem System zuvor Rust installiert werden.
Installation mit pip:
pip3 install uv
Installation mit cargo:
cargo install --git https://github.com/astral-sh/uv uv
Funktionalität
Für uv
stehen zahlreiche Optionen zur Verfügung, wie die Ausführung von uv --help
zeigt. Am interessantesten dürfte aber zunächst die Frage sein, wie ein neues Python-Projekt mit uv
initialisiert werden kann. Nehmen wir an, dass das neue Projekt den Namen „My-Python-Project“ haben soll. Dann erstellt ihr zunächst ein Verzeichnis mit diesem Namen und wechselt anschließend im Terminal in dieses Verzeichnis. Nun führt ihr diesen Befehl aus:
uv init
Dies führt dazu, dass ein Ordner mit der Bezeichnung „.git“, sowie fünf Dateien erstellt werden:
- .gitignore
- .python-version
- README.md
- main.py
- pyproject.toml
Sowohl „.git“ als auch „.gitignore“ werden für Git benötigt. Es handelt sich hierbei um eine Software zur Versionsverwaltung von Dateien. Die Datei „README.md“ enthält Informationen zum Projekt. Für Projekte, die beispielsweise zu Github übertragen werden, ist sie zwingend erforderlich. Die Datei „main.py“ ist der Einstiegspunkt eures Programms. Und die Datei „pyproject.toml“ enthält zahlreiche Informationen zum Projekt, die relevant werden, wenn ein Paket gebaut werden soll, das man veröffentlichen möchte (z.B. bei PyPi).
Zu diesem Projekt könnten nun benötigte Pakete hinzugefügt werden. In diesem Beispiel möchte ich requests
hinzufügen:
uv add requests
Die Ausführung dieses Befehls führt dazu, dass
- ein Verzeichnis mit der Bezeichnung „.venv“ angelegt wird, in dem dieses Paket zusammen mit allen Abhängigkeiten installiert wird und
- dass die Datei „pyproject.toml“ um einen entsprechenden Eintrag im Abschnitt
dependencies
erweitert wird.
Mit dem Befehl uv tree
kann man sich nun anzeigen lassen, welche Pakete für dieses Projekt installiert wurden. Zum jetzigen Zeitpunkt, also nach der Installation von requests
, erhält man folgende Ausgabe:
Resolved 6 packages in 11ms
my-python-project v0.1.0
└── requests v2.32.3
├── certifi v2025.1.31
├── charset-normalizer v3.4.1
├── idna v3.10
└── urllib3 v2.3.0
Die Deinstallation eines Pakets wird mit folgendem Befehl durchgeführt:
uv remove <Paketname>
Falls im Projekt die Datei „requirements.txt“ vorhanden ist, kann sie als Argument an uv add
übergeben werden, so dass alle Pakete, die in dieser Datei gelistet sind, installiert werden.
uv add -r requirements.txt
Für alle weiteren Befehle möchte ich auf die offizielle Dokumentation verweisen. An dieser Stelle sei nur noch erwähnt, wie uv
aktualisiert werden kann:
uv self update
Fazit
Der Paketmanager uv
ist noch recht jung und es bleibt abzuwarten, wie sich dieses Projekt entwickeln wird. Aufgrund der hohen Geschwindigkeit dieses Programms hat man nun aber eine Alternative, die insbesondere bei sehr großen Projekten zum tragen kommen kann. Der Umstand, dass mit uv
im Grunde ein Paketmanager und eine virtuelle Umgebung unter einem Dach vereint werden, vereinfacht die Verwaltung von Python-Projekten. Insofern sollte man uv
zumindest einmal ausprobieren.