Paketmanager uv auf einem Mac einrichten

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.