venv & virtualenv

Virtual Environments in Python erklärt

11.03.2024
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.
Virtualenv und venv sollten Ihnen geläufig sein, wenn Sie Ihre Python-Projekte optimal aufsetzen wollen. Das sollten Sie zum Thema Python Virtual Environments wissen.
Virtuelle Umgebungen unterstützen Entwickler dabei, ihre Python-Projekte besser zu verwalten.
Virtuelle Umgebungen unterstützen Entwickler dabei, ihre Python-Projekte besser zu verwalten.
Foto: Two Pixel - shutterstock.com

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 und

  • unter 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.