Was ist eine virtuelle Umgebung in Python?
venv, Virtual Environment
Eine virtuelle Umgebung (venv) ist ein Ordner, in dem Python einen eigenen Verweis auf den Interpreter und ein eigenes Verzeichnis für installierte Pakete anlegt. Was du dort installierst, gilt nur für dieses eine Projekt, die Systeminstallation und andere Projekte bleiben unberührt.
Zwei Python-Projekte auf demselben Rechner brauchen selten dieselbe Version einer Bibliothek, und ohne getrennte Umgebungen gewinnt immer die zuletzt installierte.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
- Erstellen
- python -m venv .venv
- Verlassen
- deactivate
- Eingebaut
- Seit Python 3.3 als Modul venv
- Verwechselt mit
- Container, conda und virtueller Maschine
Warum Projekte sich ohne Trennung gegenseitig stören
Ohne virtuelle Umgebung landet jede Installation mit pip im selben Paketverzeichnis des Interpreters. Braucht ein Projekt eine Bibliothek in Version 1 und das nächste dieselbe Bibliothek in Version 2, gewinnt die zuletzt installierte, und das andere Projekt bricht an einer Stelle ab, die niemand angefasst hat. Mit einer Umgebung je Projekt hat jedes seinen eigenen Satz an Paketen in genau den Versionen, die es braucht.
Unter Linux kommt hinzu, dass die Distribution eigene Python-Pakete installiert und Systemwerkzeuge davon abhängen. Viele aktuelle Distributionen, darunter Debian und Ubuntu, markieren ihr System-Python deshalb nach PEP 668 als extern verwaltet. Ein pip install außerhalb einer Umgebung bricht dann mit der Meldung „externally-managed-environment“ ab. Die virtuelle Umgebung ist der vorgesehene Ausweg, nicht das Umgehen der Sperre.
Virtuelle Umgebung erstellen, aktivieren und verlassen
Im Projektordner legst du die Umgebung mit einem Befehl an, aktivierst sie, installierst Pakete und verlässt sie wieder. Welcher Befehl die Umgebung aktiviert, hängt von der Shell ab:
| Shell | Aktivieren |
|---|---|
| bash und zsh (Linux, macOS) | source .venv/bin/activate |
| fish | source .venv/bin/activate.fish |
| Windows, Eingabeaufforderung | .venv\Scripts\activate.bat |
| Windows, PowerShell | .venv\Scripts\Activate.ps1 |
Unter Linux und macOS sieht der ganze Ablauf so aus:
python3 -m venv .venv # Umgebung im Ordner .venv anlegen
source .venv/bin/activate # aktivieren, der Prompt zeigt jetzt (.venv)
python -m pip install requests # Paket nur in diese Umgebung installieren
deactivate # Umgebung verlassen Verlassen funktioniert in jeder Shell mit deactivate. Schließt du das Terminal, ist die Umgebung ebenfalls nicht mehr aktiv, denn die Aktivierung gilt immer nur für die aktuelle Shell. Bei conda heißt der Befehl dagegen conda deactivate.
Unter Windows legst du die Umgebung mit py -m venv .venv an. Verweigert PowerShell das Aktivierungsskript, erlaubt Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser lokale Skripte für deinen Benutzer. Unter Debian und Ubuntu fehlt das Modul venv in der Grundinstallation manchmal, dann installierst du das Paket python3-venv nach.
Was im Ordner .venv steckt
Eine virtuelle Umgebung ist keine Kopie von Python. Sie besteht aus der Datei pyvenv.cfg, die auf die zugrunde liegende Python-Installation verweist, einem Ordner bin (unter Windows Scripts) mit einem Verweis auf den Interpreter, pip und den Aktivierungsskripten, und einem eigenen Paketverzeichnis site-packages. Python erkennt beim Start an der pyvenv.cfg, dass es in einer Umgebung läuft, und sucht Pakete nur dort.
Aktivieren bedeutet technisch nur, dass der Ordner bin der Umgebung vorne in den Suchpfad PATH gestellt und die Variable VIRTUAL_ENV gesetzt wird. Deshalb kannst du das Aktivieren auch weglassen und den Interpreter direkt aufrufen, etwa mit .venv/bin/python skript.py. Das Ergebnis ist dasselbe.
Der Name .venv ist eine Konvention, kein Zwang. Viele Werkzeuge, darunter Editoren wie Visual Studio Code und der Paketmanager uv, suchen aber genau diesen Ordner im Projekt und nutzen ihn automatisch. Seit Python 3.13 legt venv in der Umgebung außerdem eine eigene .gitignore an, damit der Ordner nicht versehentlich im Repository landet.
Wie venv, pip, Poetry und uv zusammenspielen
venv baut die Umgebung, pip füllt sie. Die Liste der Pakete hältst du klassisch in einer requirements.txt fest, erzeugt mit pip freeze > requirements.txt, und stellst sie auf einem anderen Rechner mit pip install -r requirements.txt wieder her. Diese Datei mischt allerdings die gewollten Pakete mit allem, was diese nachziehen. Deshalb führen viele Projekte die direkten Abhängigkeiten getrennt von einer erzeugten Liste mit exakten Versionen.
Poetry, pipenv und uv fassen beide Aufgaben zusammen. Sie lesen die gewünschten Pakete aus einer Projektdatei, meist der pyproject.toml, lösen die Abhängigkeiten auf, schreiben das Ergebnis in eine Lock-Datei und legen die virtuelle Umgebung selbst an. uv legt sie als .venv im Projektordner ab, Poetry und pipenv standardmäßig in einem zentralen Verzeichnis. Unter der Haube bleibt es in allen Fällen eine gewöhnliche virtuelle Umgebung, nur dass du sie nicht mehr von Hand anlegst und aktivierst.
Fehler, die immer wieder auftauchen
Der Klassiker ist die vergessene Aktivierung. Das Paket ist installiert, der Import schlägt trotzdem mit ModuleNotFoundError fehl, weil die Installation in einer anderen Umgebung oder im System-Python gelandet ist. Die schnelle Kontrolle ist which python unter Linux und macOS beziehungsweise where python unter Windows. Gewöhn dir außerdem python -m pip install statt pip install an, dann gehört pip garantiert zu dem Interpreter, den du gerade meinst.
Zweiter Dauerbrenner ist die verschobene oder kopierte Umgebung. Die Skripte in bin enthalten absolute Pfade, eine Umgebung lässt sich deshalb weder in einen anderen Ordner verschieben noch auf einen anderen Rechner kopieren. Dasselbe gilt nach einem Update der zugrunde liegenden Python-Version, wenn der alte Interpreter entfernt wurde. In allen Fällen ist die Lösung, die Umgebung zu löschen und aus der Abhängigkeitsliste neu aufzubauen.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Virtuelle Umgebung und was oft damit gleichgesetzt wird
Ein Container isoliert ein ganzes Dateisystem samt Systembibliotheken, eine virtuelle Umgebung nur die Python-Pakete. Setzt ein Paket eine C-Bibliothek in einer bestimmten Version voraus, hilft venv nicht weiter, ein passendes Image dagegen schon.
conda verwaltet neben Python-Paketen auch Bibliotheken außerhalb der Python-Welt und die Interpreter-Version selbst und bezieht sie aus eigenen Quellen. Bei Data Science und Numerik ist das ein Vorteil, im Mischbetrieb mit pip entstehen aber leicht Umgebungen, in denen niemand mehr sagen kann, woher ein Paket stammt.
pyenv installiert mehrere Python-Versionen nebeneinander und wechselt zwischen ihnen, trennt aber keine Pakete. Beides ergänzt sich: pyenv bestimmt, welcher Interpreter läuft, die virtuelle Umgebung, welche Pakete er sieht.
Eine virtuelle Maschine bildet über einen Hypervisor einen ganzen Rechner mit eigenem Betriebssystem nach. Mit der virtuellen Umgebung in Python hat sie außer dem Wortteil nichts gemein.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Die Umgebung muss auch dort ankommen, wo kein Terminal offen ist
Am eigenen Rechner aktivierst du die Umgebung im Terminal und vergisst sie danach. Editoren, geplante Aufgaben und Dienste kennen diese Aktivierung aber nicht. In Visual Studio Code oder PyCharm wählst du deshalb den Interpreter aus .venv einmal ausdrücklich für das Projekt aus, sonst laufen Tests und Debugger mit dem System-Python und melden fehlende Pakete, die nachweislich installiert sind.
Für Cronjobs und Dienste unter systemd gilt dasselbe. Statt dich auf die Aktivierung zu verlassen, trägst du den vollständigen Pfad zum Interpreter der Umgebung ein, etwa /opt/app/.venv/bin/python. In einer CI/CD-Pipeline wird die Umgebung bei jedem Lauf frisch aus der Lock-Datei gebaut, so fallen fehlende oder falsch gepinnte Abhängigkeiten auf, bevor sie in Produktion gehen.
Für den Betrieb leistet die Umgebung nicht dasselbe wie ein Container. Sie trennt Python-Pakete, aber keine Systembibliotheken, Compiler oder die Python-Version selbst. Erwartet ein Paket eine C-Bibliothek, die auf dem Zielsystem fehlt, bricht die Installation dort ab, egal wie sauber die Umgebung angelegt ist. Viele Teams legen deshalb auch im Container eine Umgebung an, damit der Pfad zu den Paketen unabhängig vom Basis-Image gleich bleibt.
Virtuelle Umgebung lernen
Wie du ein Projekt sauber aufsetzt, Abhängigkeiten festhältst und eigene Pakete baust, behandeln die Python-Trainings für Entwicklerteams an durchgehenden Beispielen.
Eine reproduzierbare Umgebung ist auch die Grundlage für verlässliche Testläufe, worum es in den Trainings zu automatisierten Testläufen ausführlich geht.
Kurse, die Virtuelle Umgebung behandeln
- Modernes Python Packaging mit uv, poetry und pyproject.toml
- Python Packaging – Verwaltung von Paketen und virtuellen Umgebungen für Python mit pipenv und pip
- Clean Code Training mit Python
- Python für Systemadministration
Weitere Kurse aus diesem Bereich
Häufige Fragen
Was ist der Unterschied zwischen venv und virtualenv?
Wie sehe ich, ob gerade eine Umgebung aktiv ist?
Brauche ich für jedes kleine Skript eine eigene Umgebung?
Gehört der Ordner .venv ins Git-Repository?
Was mache ich, wenn eine Umgebung kaputt ist?
Passt thematisch dazu
Für ein einzelnes Skript oder in einem Container lohnt der Aufwand nicht immer, und die Fälle, in denen du dir den Schritt sparen kannst, lassen sich klar benennen.
venv baut nur den Ordner, die eigentliche Entscheidung ist, welches Werkzeug die Abhängigkeiten festhält.
Deine Ansprechpartner
Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.
Norbert Jansen
Beratung & Inhouse
Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.
Virtuelle Umgebung im Kurs statt im Lexikon
Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.
Verwandte Begriffe
Alle Begriffe im Glossar