Weblog

Aktuelles Python auf Slackware 15: Warum der Weg über uv führt

17.08.2026 6 Min. Lesezeit

Slackware 15 bringt Python 3.9 mit – solide, stabil, aber mittlerweile über vier Jahre alt. Wer moderne Bibliotheken nutzen will, die aktuelle Typing-Features, Pattern Matching (seit 3.10) oder neuere Performance-Verbesserungen voraussetzen, stößt damit schnell an eine Grenze. Das System-Python zu ersetzen ist auf Slackware allerdings keine gute Idee: Ein Teil der mitgelieferten Skripte und Tools verlässt sich auf genau diese Version, und wer sie überschreibt, riskiert ein kaputtes System. Der sinnvolle Weg führt deshalb komplett am Paketmanagement vorbei, ins eigene Home-Verzeichnis.

Der klassische Weg: Kompilieren aus dem Quellcode

Der naheliegendste Ansatz ist derselbe, den es unter Linux schon gibt, seit es Linux gibt: Quellcode herunterladen, konfigurieren, kompilieren, ins Home installieren.

wget https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tgz
tar xf Python-3.12.7.tgz
cd Python-3.12.7
./configure --prefix=$HOME/.local
make -j$(nproc)
make install

Das funktioniert – mit ein paar Einschränkungen, die auf Slackware besonders ins Gewicht fallen. Python bringt beim Bauen diverse optionale Module mit, die gegen System-Bibliotheken linken: zlib, bzip2, openssl, readline, sqlite3, ffi und einige mehr. Fehlt eine davon oder die passenden Development-Header, baut Python zwar trotzdem durch, aber eben ohne das entsprechende Modul – und das merkt man oft erst Wochen später, wenn pip install an einer fehlenden ssl-Unterstützung scheitert oder sqlite3 schlicht nicht importierbar ist. Slackware liefert viele Header mit, aber nicht alle, und die Fehlermeldungen von configure sind nicht immer eindeutig genug, um das sofort zu bemerken.

Hinzu kommt der Wartungsaufwand: Jedes Sicherheitsupdate bedeutet erneutes Herunterladen, Konfigurieren und Kompilieren – von Hand, ohne dass ein Paketmanager einem sagt, dass eine neue Version verfügbar ist. Und weil das Ganze bewusst am Slackware-Paketmanagement vorbeiläuft (make install kennt keine pkgtools-Metadaten), gibt es auch keine saubere Möglichkeit, die Installation wieder rückstandsfrei zu entfernen, außer man merkt sich genau, wohin --prefix gezeigt hat.

Ein Zwischenschritt: pyenv

Wer mehrere Python-Versionen parallel braucht, kennt vermutlich pyenv. Es nimmt einem die Versionsverwaltung ab – man sagt pyenv install 3.12.7, und pyenv kümmert sich um Konfiguration und Ablage im Home-Verzeichnis, meist unter ~/.pyenv/versions/. Unter der Haube passiert aber genau das, was oben beschrieben ist: pyenv kompiliert ebenfalls aus dem Quellcode. Die Fallstricke mit fehlenden Build-Abhängigkeiten bleiben also bestehen, nur dass man sie jetzt über pyenv statt von Hand trifft. Auf Slackware bedeutet das in der Praxis: Vor dem ersten pyenv install lohnt sich ein Blick in die pyenv-Wiki-Seite zu Build-Umgebungen, und trotzdem bleibt jeder Build ein Kompiliervorgang, der ein paar Minuten dauert und bei fehlenden Abhängigkeiten scheitern kann.

Der moderne Weg: uv

Seit gut zwei Jahren hat sich mit uv ein Werkzeug etabliert, das dieses Problem grundlegend anders löst. uv stammt von Astral, der Firma hinter dem bekannten Python-Linter Ruff, ist komplett in Rust geschrieben und deckt mittlerweile fünf klassische Aufgaben ab, für die man bisher fünf verschiedene Tools brauchte: Paketinstallation (pip), Environment-Isolation (virtualenv), Python-Versionsverwaltung (pyenv), Dependency-Locking (pip-tools) und isolierte CLI-Tool-Installation (pipx).

Der entscheidende Unterschied zu pyenv: uv kompiliert nicht selbst, sondern lädt vorkompilierte, in sich geschlossene Python-Builds herunter (die sogenannten „python-build-standalone“-Releases). Es gibt also keine Build-Dependencies, keine fehlenden Header, keinen Kompiliervorgang, der minutenlang läuft und am Ende doch an einer fehlenden Slackware-Bibliothek scheitert. Ein uv python install dauert im Regelfall nur so lange wie der Download.

Installation

uv selbst ist ein einzelnes Binary ohne Abhängigkeiten – nicht einmal Python wird zur Installation vorausgesetzt:

curl -LsSf https://astral.sh/uv/install.sh | sh

Das Skript legt uv standardmäßig in ~/.local/bin ab. Ein Hinweis an dieser Stelle, weil er speziell für Slackware relevant ist: SlackBuilds.org führt zwar ein uv-Paket, dessen Version aber gerade erst bei 0.9.5 steht, während offiziell längst 0.12.x veröffentlicht ist. uv wird ausgesprochen schnell weiterentwickelt – mehrere Releases pro Woche sind keine Seltenheit –, und ein SBo-Paket kann mit diesem Tempo kaum mithalten. Für ein Tool, das ohnehin als reines Binary ausgeliefert wird und einen eigenen Update-Mechanismus mitbringt, lohnt sich der Umweg über SlackBuilds.org deshalb nicht. Der Standalone-Installer bringt seinen eigenen Selbstaktualisierungsbefehl mit:

uv self update

Python-Version installieren

Mit installiertem uv lässt sich eine aktuelle Python-Version anfordern, ohne dass das System-Python 3.9 auch nur berührt wird:

uv python install 3.12
uv python list

Die heruntergeladenen Interpreter landen isoliert unter ~/.local/share/uv/python/ – vollkommen getrennt vom Slackware-eigenen Python unter /usr/bin/python3.

Virtuelle Umgebungen und Pakete

Der Rest folgt dem gewohnten Python-Workflow, nur spürbar schneller:

uv venv --python 3.12 meinprojekt-env
source meinprojekt-env/bin/activate
uv pip install requests

uv pip install versteht sich als Drop-in-Ersatz für gewöhnliches pip install und funktioniert mit bestehenden requirements.txt-Dateien genauso wie mit einzelnen Paketen.

Projektbasiertes Arbeiten

Für eigene Projekte bietet uv einen darüberliegenden, komfortableren Workflow, der Virtualenv, Python-Version und Abhängigkeiten in einer pyproject.toml bündelt:

uv init meinprojekt
cd meinprojekt
uv add pandas numpy
uv run python skript.py

uv run sucht sich automatisch das passende Environment, ganz ohne vorheriges activate. Zusätzlich erzeugt uv beim Hinzufügen von Abhängigkeiten eine uv.lock-Datei, die jedes Paket samt transitiver Abhängigkeiten mit Hashes festschreibt – praktisch, wenn ein Projekt später auf einer anderen Maschine reproduzierbar aufgesetzt werden soll.

Ein Detail, das im Alltag überrascht, weil es sich sonst kaum ein Tool traut: uv kann Abhängigkeiten direkt im Kopf eines einzelnen Skripts deklarieren (PEP 723) und baut sich beim Ausführen automatisch ein passendes, isoliertes Environment dafür:

# /// script
# dependencies = ["requests"]
# ///
import requests
uv run skript.py

Für kleine Hilfsskripte, die sonst mühsam von Hand ein eigenes venv bräuchten, spart das spürbar Zeit.

Geschwindigkeit als Nebeneffekt

Dass uv in Rust geschrieben ist, merkt man nicht nur an der Stabilität, sondern auch an der reinen Geschwindigkeit. Installationen, die mit pip mehrere Sekunden bis hin zu Minuten dauern, sind mit uv – dank paralleler Downloads und einem globalen, systemweiten Paket-Cache – oft in einem Bruchteil der Zeit erledigt. Für den Alltag auf einem Slackware-System ist das ein angenehmer Nebeneffekt, nicht der eigentliche Grund für den Umstieg.

Ein Wort zur Zukunft von uv

Im März 2026 hat OpenAI die Firma Astral übernommen, um uv, Ruff und das Typechecking-Tool ty in die eigene Codex-Plattform zu integrieren. Das hat in der Python-Community durchaus Diskussionen ausgelöst – vor allem, weil uv damit kein neutrales, community-getragenes Zuhause mehr hat, wie es etwa Projekte unter der CNCF haben. Für die praktische Nutzung ändert das kurzfristig nichts: uv bleibt MIT-/Apache-2.0-lizenziert, quelloffen und damit im Zweifelsfall forkbar, falls sich die Entwicklung einmal in eine unerwünschte Richtung bewegen sollte. Für ein Werkzeug, das man sich rein ins eigene Home-Verzeichnis holt und jederzeit gegen eine Alternative austauschen kann, ist das ein überschaubares Risiko.

Fazit

Wer auf Slackware 15 aktuelles Python braucht, ohne das System-Python 3.9 anzurühren, hat im Kern drei Wege: von Hand kompilieren, was auf Slackware gerne an fehlenden Build-Abhängigkeiten scheitert; pyenv, das die Versionsverwaltung übernimmt, aber weiterhin kompiliert; oder uv, das fertige Python-Builds herunterlädt und damit beide Probleme umgeht. Für den Alltag – ob als schnelle Möglichkeit, eine neue Python-Version auszuprobieren, oder als vollwertiges Projekt-Tool mit Lockfiles und venv-Verwaltung – ist uv aktuell der unkomplizierteste Weg, komplett im Home-Verzeichnis und ganz ohne Root-Rechte.

π