python ist unter anderem deshalb so beliebt unter Entwicklern, weil eine breite (und ständig weiterwachsende) Palette von Drittanbieter-Packages unterstützt. Praktische Toolkits - etwa für Machine Learning - sind nur einen import
- oder pip install
-Befehl entfernt.
Wenn diese Packages allerdings nicht miteinander harmonieren, respektive verschiedene Python-Projekte konkurrierende oder inkompatible Versionen desselben Add-ons benötigen, kommen virtuelle Python-Umgebungen (Virtual Environment) ins Spiel.
Was sind virtuelle Python-Umgebungen?
Ein Virtual Environment bietet die Möglichkeit, mehrere parallele Instanzen des Python-Interpreters aufzusetzen, wobei jede mit unterschiedlichen Packages und Konfigurationen ausgestattet werden kann. Jede virtuelle Umgebung enthält eine eigenständige Kopie des Python-Interpreters, einschließlich Kopien der unterstützenden Dienstprogramme.
Packages, die innerhalb einer virtuellen Umgebung installiert sind, sind ausschließlich in dieser sichtbar. Selbst große, komplexe Packages mit plattformabhängigen Binaries können so in einer Virtual Environment voneinander abgegrenzt werden.
Ein Blick auf die häufigsten Use Cases für virtuelle Python-Umgebungen:
Sie entwickeln mehrere Projekte, die von verschiedenen Versionen der gleichen Packages abhängig sind oder müssen ein Python-Projekt aufgrund einer Namespace-Kollision von spezifischen Packages isolieren.
Sie arbeiten in einer Python-Umgebung, in der Sie das site-packages-Verzeichnis nicht ändern können. Das kann an einer stark kontrollierten Umgebung liegen (beispielsweise Managed Hosting) oder auf einem Server, bei dem der Interpreter (oder die darin verwendeten Packages) aufgrund von Produktionsanforderungen nicht verändert werden kann.
Sie wollen mit einer bestimmten Kombination von Packages unter streng kontrollierten Bedingungen experimentieren, zum Beispiel um die Cross- oder Abwärtskompatibilität zu überprüfen.
Sie möchten eine "Basis"-Version des Python-Interpreters auf einem System ohne Drittanbieter-Packages ausführen und diese (für jedes Projekt) nur bei Bedarf installieren.
Natürlich verbietet Ihnen niemand, eine Python-Bibliothek einfach in den Unterordner eines Projekts zu entpacken und sie auf diese Weise zu nutzen. Sie könnten auch eine eigenständige Kopie des Python-Interpreters herunterladen, entpacken und dazu nutzen, bestimmte Skripte und Packages auszuführen.
Allerdings wird es schnell diffizil, Projekte, die auf diese Art und Weise "zusammengestellt" werden, zu managen. Mit Packages zu arbeiten, die aus binären Komponenten bestehen oder aufwendige Drittanbieterabhängigkeiten aufweisen, kann ein echter Albtraum sein. Von der Reproduzierbarkeit solcher Setups ganz zu schweigen. Die nativen Mechanismen von Python anzuwenden, um Virtual Environments zu erstellen, zu nutzen und zu reproduzieren ist auf lange Sicht das beste Gegenmittel.
venv: Virtual Environments in Python
Diese systemeigenen Python-Tools für virtuelle Umgebungen simplifizieren den Prozess. Inzwischen verwenden sämtliche unterstützte Python-Versionen das native Tool für Virtual Environments - venv.
Virtual Environments in Python erstellen
Um eine virtuelle Umgebung in einem bestimmten Verzeichnis zu erstellen, nutzen Sie folgenden Befehl:
python -m venv /path/to/directory
Wenn Ihr System eine Version von Python 2 als Standard-Interpreter erkennt, sollten Sie python3
anstelle von python
verwenden. Unter Windows können Sie py
anstelle von python
verwenden, um zuverlässig auf eine installierte Python-Version zuzugreifen (hier erfahren Sie mehr über die Nutzung des Py-Launchers).
Der gesamte Einrichtungsprozess der virtuellen Umgebung nimmt circa ein bis zwei Minuten in Anspruch. Wenn er abgeschlossen ist, sollte ein entsprechendes Verzeichnis mit einigen Unterverzeichnissen vorhanden sein. Das jeweils wichtigste Unterverzeichnis ist bin
unter Unix und Scripts
unter Windows.
Dort finden Sie die Kopie des Python-Interpreters für die virtuelle Umgebung zusammen mit den zugehörigen Utilities. Dabei ist zu beachten, dass jedes Virtual Environment seine eigene Kopie des Python-Interpreters enthält und entsprechend groß sein kann. Eine virtuelle Umgebung mit Python 3.9 benötigt je nach Betriebssystem zwischen 15 MB und 25 MB Speicherplatz.
Virtuelle Umgebung in Python aktivieren
Bevor Sie eine virtuelle Umgebung in Python verwenden können, müssen Sie sie explizit aktivieren. Dadurch wird die virtuelle Umgebung für die Dauer einer Shell-Sitzung zum Standard-Python-Interpreter. Je nachdem, welches Betriebssystem und welche Befehls-Shell Sie verwenden, ist eine bestimmte Syntax zu verwenden, um ein Virtual Environment zu aktivieren:
Unix oder MacOS mit Bash-Shell:
source /path/to/venv/bin/activate
Unix oder MacOS mit csh-Shell:
source /path/to/venv/bin/activate.csh
Unix oder MacOS mit fish-Shell:
source /path/to/venv/bin/activate.fish
Windows mit Eingabeaufforderung:
path\to\venv\Scripts\activate.bat
Windows mit PowerShell:
path\to\venv\Scripts\Activate.ps1
Die jeweils aktivierte Umgebung funktioniert nur im Kontext, in dem sie aktiviert wurde. Starten Sie beispielsweise zwei PowerShell-Instanzen A und B und aktivieren die virtuelle Umgebung nur in Instanz A, gilt diese Umgebung auch nur für Instanz A.
Viele Python-IDEs erkennen und aktivieren ein Virtual Environment automatisch, wenn sie ein solches im aktuellen Projektverzeichnis finden - Microsoft Visual Studio Code beispielsweise (wenn die Python-Extension aktiviert ist).
Virtual Environments in Python konfigurieren
Sobald Sie die neue virtuelle Umgebung aktiviert haben, können Sie den Package-Manager pip
verwenden, um Packages hinzuzufügen und zu ändern. Das finden sie
unter Windows im Unterverzeichnis
Scripts
undunter Unix im Unterverzeichnis
bin
.
Wenn Sie bereits mit der Funktionsweise von pip
vertraut sind, können Sie sich entspannt zurücklehnen - das Vorgehen ist in virtuellen Umgebungen identisch. Sie sollten lediglich sicherstellen, dass Sie die Instanz von pip
verwenden, die die Pakete für die virtuelle Umgebung in dem Kontext verwaltet, in dem sie aktiviert wurde (also die Bash- oder die Windows CLI/PowerShell-Session). Wenn Sie überprüfen möchten, ob Sie die richtige pip
und die richtige virtuelle Umgebung verwenden, können Sie mit pip -V
überprüfen, ob der angezeigte Pfad auf ein Unterverzeichnis Ihrer Virtual Environment verweist.
Wenn Sie pip
in einer virtuellen Umgebung aktualisieren möchten, nutzen Sie dazu idealerweise den Befehl python -m pip install -U pip
. Das gewährleistet, dass der Upgrade-Prozess abläuft, ohne dass Python wichtige Dateien sperrt. Der Befehl pip install -U pip
ist möglicherweise nicht dazu geeignet, das Upgrade ordnungsgemäß abzuschließen.
Um die erstellte virtuelle Umgebung dazu zu nutzen, Python-Skripte auszuführen, rufen Sie Python einfach über die Befehlszeile in dem Kontext auf, in dem Sie es aktiviert haben.
Python-Packages in virtuellen Umgebungen managen
Wenn Sie eine neue virtuelle Umgebung aufsetzen, werden die Packages pip
und setuptools
installiert. Alle anderen Packages, die Sie in der Umgebung verwenden möchten, müssen Sie selbst installieren. Bei Projekten mit komplexen Anforderungen sollten Sie im Stammverzeichnis die Datei requirements.txt
aufbewahren, in der diese aufgeführt sind. Wenn Sie ein Virtual Environment neu erstellen müssen, können Sie so zudem alle benötigten Packages mit dem Befehl pip install -r requirements.txt
neu installieren.
Dabei sollten Sie beachten, dass die Kopien von pip
und setuptools
, die sich in einer virtuellen Umgebung befinden, lokal für diese gelten. Jedes Virtual Environment hat seine eigenen Kopien, die unabhängig voneinander aktualisiert und gewartet werden müssen. Deshalb kann es zu Warnmeldungen kommen, die darauf hinweisen, dass pip in einigen virtuellen Umgebungen veraltet ist, in anderen jedoch nicht. pip muss für jede virtuelle Umgebung separat aktualisiert werden.
Virtual Environments in Python deaktivieren
Wenn Sie mit der Nutzung der virtuellen Umgebung fertig sind, können Sie einfach die Sitzung beenden, in der Sie sie genutzt haben. Um in der gleichen Sitzung weiterzuarbeiten, aber mit dem Standard-Python-Interpreter, nutzen Sie den Befehl deactivate
. Windows-User, die die Eingabeaufforderung nutzen, müssen dazu deactivate.bat
im Unterverzeichnis Scripts
ausführen. Unix- und Windows-Benutzer, die PowerShell verwenden, können deactivate
einfach in einem beliebigen Verzeichnis eingeben.
Virtuelle Umgebungen in Python entfernen
Virtual Environments sind in sich geschlossen. Wenn Sie eine virtuelle Umgebung nicht mehr benötigen, können Sie einfach ihr Verzeichnis löschen. Zuvor sollten Sie nur sichergehen, alle laufenden Python-Instanzen zu schließen, die die virtuelle Umgebung verwenden.