Virtuelle Umgebungen in Python: Projekte sauber isolieren mit venv

Warum globale Paketinstallationen früher oder später Probleme machen und wie du mit venv, pip und requirements.txt jedes Projekt sauber voneinander trennst.

Teilen

Früher oder später passiert es jedem: Du arbeitest an zwei Python-Projekten, das eine braucht Django 3, das andere Django 5. Installierst du beide global, überschreibt eines das andere und plötzlich läuft nichts mehr. Genau dieses Problem lösen virtuelle Umgebungen. In diesem Beitrag lernst du, wie du mit dem eingebauten Modul venv für jedes Projekt eine saubere, isolierte Umgebung erstellst und deine Abhängigkeiten unter Kontrolle behältst.

Warum überhaupt virtuelle Umgebungen?

Wenn du ein Paket mit pip install installierst, landet es standardmäßig systemweit in deiner Python-Installation. Das klingt praktisch, führt aber schnell zu Konflikten: Verschiedene Projekte brauchen unterschiedliche Versionen desselben Pakets, und diese Versionen vertragen sich nicht immer.

Eine virtuelle Umgebung ist im Grunde ein eigener Ordner, der eine private Kopie des Python-Interpreters und einen eigenen Paketspeicher enthält. Aktivierst du sie, gelten Installationen nur innerhalb dieser Umgebung. Vorteile auf einen Blick:

  • Isolation: Jedes Projekt hat seine eigenen Abhängigkeiten und Versionen.
  • Reproduzierbarkeit: Kolleginnen und Kollegen können exakt dieselbe Umgebung nachbauen.
  • Sauberkeit: Deine globale Python-Installation bleibt schlank und unangetastet.

Eine Umgebung erstellen und aktivieren

Das Modul venv ist seit Python 3.3 fest eingebaut, du musst also nichts zusätzlich installieren. Wechsle in deinen Projektordner und lege eine Umgebung an. Der Name .venv hat sich als Konvention etabliert:

# Umgebung im Ordner .venv erstellen
python3 -m venv .venv

# Aktivieren unter macOS / Linux
source .venv/bin/activate

# Aktivieren unter Windows (PowerShell)
.venv\Scripts\Activate.ps1

Ist die Umgebung aktiv, siehst du meist ein (.venv) vor deinem Prompt. Jeder Aufruf von python und pip bezieht sich nun auf diese isolierte Umgebung. Zum Verlassen genügt ein einfacher Befehl:

# Umgebung wieder verlassen
deactivate

Pakete mit pip installieren

Innerhalb der aktiven Umgebung nutzt du pip wie gewohnt. Installiere zum Beispiel die beliebte requests-Bibliothek und prüfe anschließend, was in deiner Umgebung liegt:

# Ein Paket installieren
pip install requests

# Eine bestimmte Version festlegen
pip install "requests==2.31.0"

# Installierte Pakete anzeigen
pip list

Ein kleiner, aber wichtiger Tipp: Wenn du sichergehen willst, dass du den pip der aktiven Umgebung verwendest (und nicht versehentlich einen globalen), rufe ihn über den Interpreter auf. Das ist besonders bei mehreren Python-Versionen auf dem System hilfreich:

# pip garantiert aus der aktiven Umgebung nutzen
python -m pip install requests

Abhängigkeiten mit requirements.txt festhalten

Damit andere dein Projekt starten können, brauchst du eine Liste aller Pakete. Genau dafür gibt es die requirements.txt. Mit pip freeze exportierst du den aktuellen Stand deiner Umgebung inklusive exakter Versionen:

# Aktuellen Stand in eine Datei schreiben
pip freeze > requirements.txt

Die Datei sieht dann etwa so aus – jede Zeile ein Paket mit fixierter Version:

certifi==2024.2.2
charset-normalizer==3.3.2
idna==3.6
requests==2.31.0
urllib3==2.2.1

Wer dein Projekt später klont, erstellt einfach eine neue Umgebung und installiert alles in einem Rutsch:

# Umgebung neu aufbauen
python3 -m venv .venv
source .venv/bin/activate

# Alle Abhängigkeiten aus der Datei installieren
pip install -r requirements.txt

So ist garantiert, dass alle mit denselben Versionen arbeiten – das berühmte „Bei mir läuft es aber“ gehört damit der Vergangenheit an.

Praxis-Tipps für den Alltag

Ein paar Gewohnheiten machen die Arbeit mit virtuellen Umgebungen deutlich angenehmer:

  • Die Umgebung nicht committen: Der Ordner .venv gehört nicht ins Repository. Trage ihn in deine .gitignore ein – er lässt sich ja jederzeit aus der requirements.txt neu erzeugen.
  • Pro Projekt eine Umgebung: Lege nicht eine geteilte Umgebung für alles an, sondern immer eine direkt im jeweiligen Projektordner.
  • requirements.txt aktuell halten: Nach jeder neuen Installation lohnt es sich, die Datei neu zu erzeugen.

Der Eintrag in der .gitignore ist schnell gemacht:

# .gitignore
.venv/
__pycache__/
*.pyc

Fazit

Virtuelle Umgebungen sind kein optionaler Luxus, sondern gehören zum Handwerkszeug jedes Python-Entwicklers. Mit venv erstellst du in Sekunden eine isolierte Spielwiese, mit pip verwaltest du deren Pakete und mit der requirements.txt machst du dein Projekt für andere reproduzierbar. Gewöhne dir an, jedes neue Projekt mit python3 -m venv .venv zu starten – dein zukünftiges Ich wird es dir danken, wenn Versionskonflikte gar nicht erst entstehen.