Python venv: virtuelle Umgebung auf Mac, Windows und Linux
- Thema
- Python
- Veröffentlicht
- Aktualisiert
- Lesezeit
- 11 Min.
- Getestet mit
- Python 3.14.4 (macOS und Windows), 3.15.0 (macOS)
Eine Python venv ist ein eigener Ordner in deinem Projekt, in dem die Pakete nur für dieses Projekt liegen. Du legst sie im Projektordner mit python3 -m venv .venv an (unter Windows python -m venv .venv) und aktivierst sie danach. Alles, was du dann mit pip installierst, landet in der venv und nicht global auf deinem Rechner.
Was ist eine Python venv?
venv steht für „virtual environment“, also virtuelle Umgebung. Das Modul gehört seit Python 3.3 zur Standardbibliothek, du musst nichts dazu installieren. Ein Befehl erzeugt einen Ordner, meist .venv genannt, und darin liegen:
- das Python, mit dem du die Umgebung angelegt hast, als Verweis oder Kopie
- ein eigenes
pip - ein eigener Ordner für Pakete
- kleine Skripte zum Aktivieren, je nach System und Terminal
Solange die venv aktiv ist, benutzt dein Terminal dieses Python und dieses pip. Pakete aus anderen Projekten sieht es nicht. Was die Doku genau dazu sagt, steht auf der Seite zum venv-Modul (öffnet in neuem Tab).
Warum du für jedes Projekt eine venv brauchst
Von venv habe ich lange nur nebenbei gehört. Meistens habe ich es in Tutorials aufgeschnappt, und dort wurde es selten gut erklärt. Erst als ich mich genauer damit beschäftigt habe, wurde mir klar, wie wichtig das für jemanden wie mich ist. Ich teste und probiere gern viele verschiedene Dinge aus. Früher lag alles global auf meinem Rechner, heute ist jedes Projekt für sich abgeschlossen.
Braucht ein altes Projekt ein Paket in Version 1 und ein neues dasselbe Paket in Version 2, bekommt mit venv jedes seine eigene Version. Ohne venv gewinnt die zuletzt installierte, und das andere Projekt läuft vielleicht nicht mehr.
Gerade beim Ausprobieren hilft das. Wenn du ein Paket nur testen willst, installierst du es in die venv. Gefällt es dir nicht, löschst du den Ordner, und dein System ist so sauber wie vorher.
Zusammen mit einer requirements.txt weißt du außerdem genau, welche Pakete ein Projekt braucht. Auf einem anderen Rechner baust du die Umgebung damit schnell nach.
Auf dem Mac und unter Linux nutzt das System teilweise selbst Python. Wenn du global Pakete installierst, kommst du dem in die Quere. Neuere Installationen lehnen ein globales pip install deshalb oft von sich aus ab. Mit Python aus Homebrew auf dem Mac kommt dann zum Beispiel error: externally-managed-environment.
Die Doku beschreibt eine venv als Wegwerfordner: Er kommt nicht in Git, er wird nicht verschoben oder kopiert, und wenn etwas nicht stimmt, legst du ihn einfach neu an. Dein eigener Code liegt deshalb nie in .venv, sondern daneben im Projektordner.
venv erstellen und aktivieren auf dem Mac
Auf dem Mac arbeite ich mit iTerm und dem Terminal in VS Code, die Befehle sind in beiden dieselben. Wechsle zuerst in deinen Projektordner und leg die venv an:
cd mein-projekt
python3 -m venv .venvpython3 -m venv startet das venv-Modul, .venv ist der Name des Ordners. Auf dem Mac heißt der Befehl python3, ein einfaches python gibt es je nach Installation nicht.
Danach aktivierst du die Umgebung:
source .venv/bin/activateHat es geklappt, steht vor deiner Eingabezeile jetzt (.venv). Das bleibt so, bis du das Terminal schließt oder die venv verlässt. Öffnest du ein neues Terminalfenster, musst du sie dort wieder aktivieren.
Python venv unter Windows
Unter Windows habe ich die PowerShell benutzt. Der Befehl zum Anlegen ist fast derselbe, nur heißt Python hier python:
cd mein-projekt
python -m venv .venvKennt Windows den Befehl python nicht oder öffnet stattdessen den Microsoft Store, probier py -m venv .venv. py ist der Python-Starter für Windows, der bei der offiziellen Installation mitkommt.
Aktivieren geht unter Windows über einen anderen Pfad, mit Scripts statt bin und Backslashes:
.venv\Scripts\Activate.ps1In der alten Eingabeaufforderung (cmd) heißt der Befehl .venv\Scripts\activate.bat.
Bei mir lief das in der PowerShell ohne Meldung. Es kann aber passieren, dass Windows das Aktivierungsskript blockiert, weil Skripte für deinen Benutzer nicht erlaubt sind. Dann hilft laut venv-Doku (öffnet in neuem Tab) dieser Befehl, der Skripte nur für dein Benutzerkonto erlaubt:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserDanach funktioniert Activate.ps1, und vor der Eingabe steht auch hier (.venv).
venv unter Linux
Linux habe ich selbst nicht ausprobiert. Laut Python-Doku sind die Befehle dieselben wie auf dem Mac:
python3 -m venv .venv
source .venv/bin/activateUnter Debian und Ubuntu ist venv manchmal nicht vollständig dabei. Dann bricht der erste Befehl mit einer Fehlermeldung ab, die das fehlende Paket nennt, meist python3-venv. Dieses Paket installierst du über die Paketverwaltung und legst die venv danach noch einmal an.
Pakete installieren und die venv wieder verlassen
Ist die venv aktiv, installierst du Pakete wie gewohnt mit pip:
pip install requestsDas Paket landet jetzt in .venv und nicht global. Woher pip die Pakete holt und was auf ihrer Seite im Paketverzeichnis steht, erkläre ich im Beitrag zu PyPI.
Ob du gerade in einer venv arbeitest, kannst du auch in Python selbst prüfen:
import sys
if sys.prefix != sys.base_prefix:
print("venv aktiv:", sys.prefix)
else:
print("keine venv, das ist das globale Python")sys.prefix zeigt auf das Python, das gerade läuft, sys.base_prefix auf das Python, aus dem die venv angelegt wurde. Sind beide verschieden, läuft das Skript in einer venv. Diesen Weg empfiehlt auch die venv-Doku (öffnet in neuem Tab).
Wenn du fertig bist, verlässt du die venv mit:
deactivateDer Befehl ist auf allen drei Systemen gleich. (.venv) verschwindet, und du bist wieder beim globalen Python.
requirements.txt: Pakete festhalten und wieder installieren
Die requirements.txt ist eine einfache Textdatei im Projektordner. Darin steht, welche Pakete dein Projekt in welcher Version braucht. Ich nutze sie zusammen mit der .venv in meinen Projekten. Die venv selbst kommt nicht in Git und wird nicht verschoben, deshalb hält die requirements.txt fest, was hineingehört.
requirements.txt erstellen
Bei aktiver venv schreibt dieser Befehl alle installierten Pakete in die Datei:
pip freeze > requirements.txtpip freeze listet die Pakete auf, und > leitet die Liste in die Datei um. Nach pip install requests sieht die Datei zum Beispiel so aus:
certifi==2026.7.22
charset-normalizer==3.5.2
idna==3.20
requests==2.34.2
urllib3==2.8.0Installiert hast du nur requests, in der Datei stehen aber fünf Pakete. Die anderen vier braucht requests selbst, und pip hat sie mitgebracht. == heißt: genau diese Version. So bekommst du später dieselben Versionen, mit denen dein Projekt funktioniert hat.
pip install requirements.txt: alles auf einmal installieren
Auf einem neuen Rechner, nach einem git clone oder nachdem du die venv gelöscht hast, legst du die venv neu an, aktivierst sie und installierst alles aus der Datei:
pip install -r requirements.txtDas -r sagt pip, dass die Paketnamen aus einer Datei kommen. Ohne -r würde pip versuchen, ein Paket mit dem Namen „requirements.txt“ zu finden.
Wann du die Datei aktualisierst
Jedes Mal, wenn du ein Paket dazu installierst, entfernst oder auf eine neue Version hebst, rufst du pip freeze > requirements.txt noch einmal auf. Die Datei wird dabei komplett neu geschrieben. Feste Versionen mit == sind für eigene Projekte der einfachste Weg. Andere Schreibweisen wie >= für „mindestens diese Version“ erklärt die pip-Doku zum Dateiformat (öffnet in neuem Tab).
venv in VS Code: den richtigen Interpreter wählen
VS Code mit der Python-Erweiterung sucht beim Öffnen eines Ordners selbst nach einer .venv. Liegt sie im Projekt, schlägt VS Code sie meist direkt vor. Sicher gehst du so:
- Öffne die Befehlspalette mit
Cmd + Umschalt + P(Mac) oderStrg + Umschalt + P(Windows und Linux). - Tippe „Python: Interpreter auswählen“ und wähle den Befehl aus. Ist dein VS Code auf Englisch, heißt er „Python: Select Interpreter“.
- Wähle den Eintrag mit
.venvim Pfad. VS Code markiert ihn mit „Arbeitsbereich“, weil er zu deinem Projektordner gehört.

Rot markiert ist der Explorer mit dem Ordner .venv. Darin liegt auch die .gitignore, die venv selbst angelegt hat. Gelb ist die venv in der Interpreter-Auswahl, darüber stehen die globalen Python-Versionen des Macs. Blau ist das Terminal: VS Code hat dort source …/.venv/bin/activate selbst ausgeführt, danach steht (.venv) vor der Eingabe.
Das passiert jedes Mal, wenn du in VS Code ein neues Terminal öffnest. Sobald eine Python-Datei offen ist, zeigt VS Code die gewählte Umgebung auch unten in der Statusleiste, und ein Klick darauf öffnet dieselbe Auswahl. Auch der „Run“-Knopf führt deine Skripte dann mit dem Python aus der venv aus.
Taucht die .venv nicht in der Liste auf, hast du sie vielleicht angelegt, während VS Code schon offen war. Dann hilft es, das Fenster neu zu laden oder die Liste in der Auswahl zu aktualisieren. Mehr Einstellungen beschreibt die VS-Code-Doku zu Python-Umgebungen (öffnet in neuem Tab).
Welche anderen Editoren sich für den Anfang eignen, vergleiche ich im Beitrag Python IDE für Anfänger.
venv und Git: der Fehler, den ich gemacht habe
Am Anfang habe ich meine venv mit ins Git-Repository geschoben, weil sie nicht in der .gitignore stand. Wenn du Git nutzt, gehört deshalb diese Zeile in die .gitignore im Projektordner:
.venv/Die requirements.txt kommt dagegen mit ins Repository. Aus ihr baut sich jeder die venv selbst.
Seit Python 3.13 hilft venv hier mit: Es legt in den Ordner .venv selbst eine kleine .gitignore an, die den ganzen Ordner für Git ausblendet. Mit Python 3.14.4 auf dem Mac ist die Datei nach python3 -m venv .venv da. Die eigene Zeile in der .gitignore schadet trotzdem nicht. Sie greift auch dann, wenn die venv mit einer älteren Version oder einem anderen Werkzeug angelegt wurde.
Was sonst noch in die .gitignore gehört und wie du eine schon hochgeladene venv wieder aus dem Repository holst, steht in meinem Beitrag .gitignore für Python.
venv löschen und neu anlegen
Einen eigenen Befehl zum Löschen gibt es nicht. Du verlässt die venv mit deactivate und löschst den Ordner. Auf dem Mac und unter Linux:
rm -rf .venvIn der Windows-PowerShell:
Remove-Item -Recurse -Force .venvMit einer requirements.txt verlierst du dabei nichts: venv neu anlegen, aktivieren und pip install -r requirements.txt ausführen. Genauso gehst du vor, wenn du den Projektordner verschiebst oder umbenennst. Eine venv lässt sich laut Doku nicht verschieben, sie wird am neuen Ort neu angelegt.
Mehr Python für Einsteiger findest du auf der Python-Seite, alle Beiträge im Blog.
Häufige Fragen
Wie erstelle ich eine venv in Python?
Öffne ein Terminal im Projektordner und gib auf dem Mac und unter Linux python3 -m venv .venv ein, unter Windows python -m venv .venv. Danach aktivierst du die Umgebung, auf dem Mac und unter Linux mit source .venv/bin/activate, in der Windows-PowerShell mit .venv\Scripts\Activate.ps1.
Wie lösche ich eine Python-venv?
Einen eigenen Befehl dafür gibt es nicht. Du verlässt die Umgebung mit deactivate und löschst den Ordner .venv. Steht eine requirements.txt im Projekt, legst du die venv schnell neu an und installierst alle Pakete mit pip install -r requirements.txt wieder.
Was ist eine virtuelle Python-Umgebung?
Ein Ordner im Projekt, in dem eine eigene Python-Umgebung mit eigenen Paketen liegt. Was du dort mit pip installierst, gilt nur für dieses Projekt und nicht für dein ganzes System. So stören sich zwei Projekte mit unterschiedlichen Paketversionen nicht.
Muss ich venv extra installieren?
Nein, venv gehört seit Python 3.3 zur Standardbibliothek. Unter Debian und Ubuntu fehlt manchmal ein Teil davon. Dann bricht der Befehl mit einer Fehlermeldung ab, die das fehlende Paket nennt, meist python3-venv.
Soll der Ordner venv oder .venv heißen?
Beides ist üblich, die Python-Doku nennt beide Namen. Ich nehme .venv, das habe ich irgendwann so übernommen und mich daran gewöhnt. Der Punkt versteckt den Ordner auf dem Mac und unter Linux im Dateimanager, und VS Code sucht standardmäßig nach .venv.
Hat dir der Beitrag geholfen?
Danke, das freut mich.
Danke für die ehrliche Antwort. Was hat gefehlt? Schreib es gern in die Kommentare.
Fehler gefunden oder eine Frage zum Code? Schreib einen Kommentar oder eine E-Mail.
Kommentare
Du brauchst kein Konto. Name und E-Mail sind freiwillig, die E-Mail-Adresse wird nicht angezeigt. Ich lese jeden Kommentar, bevor er erscheint. Mehr dazu im Datenschutz.