Die Isolations-Blase
Virtual Environments: wie man verhindert, dass sich Python-Projekte gegenseitig zerlegen.
Du weißt, wie man Pakete mit pip installiert. Alles funktioniert — bis du eines Tages NumPy für ein neues Projekt aktualisierst und dein altes TensorFlow-Projekt sich weigert zu starten. Du hast keine einzige Zeile Code geändert, aber etwas Unsichtbares ist kaputtgegangen.
Willkommen in der Dependency Hell: Der Moment, in dem sich gemeinsam genutzte Paketversionen zwischen Projekten in die Quere kommen. Dieser Artikel stellt zwei Werkzeuge vor, die diesen Albtraum verhindern — Virtual Environments für Python-Level-Isolation und Docker-Container für vollständige System-Isolation.
Dependency Hell — Wenn Pakete kollidieren
Dependency-Konflikt
In einer echten Werkstatt siehst du das Chaos sofort. In Python verstecken sich Konflikte, bis ein Import zur Laufzeit mit einer kryptischen Fehlermeldung abstürzt. Außerdem kann man in einer Werkstatt theoretisch zwei Versionen des gleichen Werkzeugs nebeneinander haben — in einer Python-Umgebung geht das nicht.
Beispiel: TensorFlow vs. NumPy
Drei Isolationsstufen
Virtual Environments — Eine Blase pro Projekt
Virtual Environment (venv)
Die Plastikfolien-Analogie passt gut: Isolation und einfaches Aufräumen. Aber eine venv isoliert nur Python-Pakete — nicht das Betriebssystem, Systembibliotheken oder GPU-Treiber. Und requirements.txt ist präziser als eine Folie — es ist ein exaktes Inventar mit Versionsnummern.
Der venv-Workflow in 5 Schritten
Reproduzierbarkeit mit requirements.txt
Warnung: Niemals pip install ohne aktives venv
Interaktiv: Vorher vs. Nachher
Schalte zwischen den beiden Szenarien um: Links siehst du, wie eine globale Installation zum Versionskonflikt führt. Rechts zeigt der gleiche Ablauf mit Virtual Environments — jedes Projekt hat seine eigene Blase, kein Paket stört das andere. Achte besonders auf die Fehlermeldung links und den sauberen Trainingsstart rechts.
braucht numpy<1.24
braucht numpy>=2.0
Docker — Der Frachtcontainer für Code
Docker
Ein Frachtcontainer hat eigene physische Wände; Docker-Container teilen sich den Kernel des Hosts — sie sind leichter, aber auch abhängiger. Einen physischen Container zu klonen braucht Zeit; Docker-Images werden in Sekunden kopiert und in Registries gepusht. Und Frachtcontainer starten nicht "in Sekunden" — Docker-Container schon, weil kein Bootvorgang nötig ist.
Isoliert nur Python-Pakete. Leichtgewichtig, eingebaut ab Python 3.3, kein Extra-Tool nötig. Ideal für alltägliche Entwicklung. Das Betriebssystem und Systembibliotheken werden nicht isoliert.
Isoliert das gesamte System: OS, Bibliotheken, GPU-Treiber, Python und Pakete. Schwerer, braucht Docker-Installation. Ideal für Deployment, Zusammenarbeit und spezifische GPU/CUDA-Setups.
Beispiel: Minimales Dockerfile für ein KI-Projekt
Irrtum: Docker ist eine Virtuelle Maschine
Deep Dive: requirements.txt richtig machen
Deep Dive: Docker im KI-Ökosystem
Das Wichtigste auf einen Blick
Quiz: Virtual Environments & Docker
Checkpoint
- Was passiert, wenn zwei Projekte unterschiedliche Versionen derselben Bibliothek brauchen und beide global installiert sind, ohne Virtual Environment?
- Was macht der Befehl python -m venv mein_projekt mit deiner Python-Installation und Paketverwaltung?
- Was ist der Hauptunterschied zwischen einem Python Virtual Environment und einem Docker Container in Bezug auf das, was sie isolieren?