Python: Virtual Environment (venv)
Ein Virtual Environment ist wie ein eigener, abgeschlossener Arbeitsraum für eine Software in einem Betriebssystem.
Optimalerweise bekommt jedes neue Software-Projekt seinen eigenen kleinen Bereich mit eigenen Programmen und Einstellungen zugewiesen. Was dort installiert oder geändert wird, hat nur Einfluss auf dieses Projekt und nicht auf anderen Projekte oder das gesamte System.
Software-Entwickler nutzen Virtual Environments, um Software-Projekte auf der gleichen Hardware im gleichen Betriebssystem, mit unterschiedlichen Abhängigkeiten und Paketversionen voneinander abzuschotten, damit sie sich nicht gegenseitig beeinflussen können.
Virtuelle Umgebung mit „venv“
Mit „venv“ bietet Python eine integrierte Lösung zur Erstellung virtueller Umgebungen, Python-Projekte voneinander zu isolieren, sodass jedes Projekt unabhängig von anderen Projekten eigene Abhängigkeiten und Paketversionen verwenden kann.
Seit der Python-Version 3.3 ist das Modul „venv“ fester Bestandteil und gilt damit als der empfohlene Weg, um Virtual Environments zu erstellen.
Welche Vorteile hat eine virtuelle Umgebung?
Eine virtuelle Umgebung mit „venv“ bietet bei der Python-Entwicklung unter Raspberry Pi OS mehrere wichtige Vorteile:
- Benötigte Bibliotheken lassen sich projektbezogen installieren. Das heißt, das Löschen eines Projekts hinterlässt keine Spuren im System.
- Die systemweiten Python-Pakete von Raspberry Pi OS bleiben unverändert. Dadurch vermeidet man Konflikte zwischen unterschiedlichen Projekten.
- Jedes Projekt kann unterschiedliche Paket-Versionen nutzen, ohne andere Projekte zu beeinflussen.
- Pakete und Bibliotheken werden unter einem Benutzer installiert. Das reduziert das Risiko, das System unabsichtlich zu verändern.
Gerade bei Raspberry Pi OS, wo Teile des Betriebssystems stark auf Python angewiesen sind, sind virtuelle Umgebungen besonders sinnvoll.
Erstellen einer virtuellen Umgebung
Typischerweise erstellt man sich für jedes Software-Projekt ein eigenes Verzeichnis und installiert darin die virtuelle Umgebung.
Hierzu erstellen wir ein neues Verzeichnis mit dem Namen „demo“ im Benutzerverzeichnis von „pi“ und wechseln in dieses Verzeichnis.
mkdir /home/pi/demo cd /home/pi/demo
Dann erstellen wir darin die virtuelle Umgebung.
Hinweis: Grundsätzlich kann man einen beliebigen Verzeichnisnamen für die virtuelle Umgebung wählen. In der Praxis hat sich der Name „.venv“ als allgemeine Konvention etabliert. Durch den Punkt wird das Verzeichnis versteckt. Man kann den Punkt auch weglassen, dann ist das Verzeichnis sichtbar.
python3 -m venv .venv
Die virtuelle Umgebung „.venv“ enthält die Kopie einer typischen Python-Verzeichnisstruktur in die zusätzliche Bibliotheken, Module und Pakete installiert werden können, die nur in dieser virtuellen Umgebung gültig sind.
Aktivierung einer virtuellen Umgebung
Damit die Kommandozeile weiß, das Änderungen nicht global, sondern sich nur auf eine bestimmte virtuelle Umgebung bezieht, muss man diese aktivieren:
source .venv/bin/activate
Das Zeichen dafür, dass die virtuelle Umgebung erfolgreich aktiviert wurde, ist eine Änderung der Eingabeaufforderung. Der Name der Umgebung wird typischerweise am Anfang der Eingabeaufforderungszeile angezeigt. Dieses Präfix zeigt an, dass alle python- oder pip-Befehle, die jetzt ausgeführt werden, nur in dieser Umgebung Gültigkeit haben und nicht im gesamten System.
Software in der virtuellen Umgebung installieren
Wichtig ist, dass die virtuelle Umgebung aktiviert ist. Das erkennt man am Präfix „demo“ (in diesem Fall) vor der Eingabeaufforderung.
Jetzt installieren wir ein Paket. Das Paket macht nicht viel Sinn, weil es nur eine ASCII-Grafik ausgibt. Allerdings dient es uns hier nur als Demo, um zu testen, wie sich eine virtuelle Umgebung verhält.
pip install cowsay
Dann testen wir das installierte Programm aus dem Paket in der virtuellen Umgebung.
cowsay -t "venv ist super!"
Das Programm gibt eine Kuh mit einer Sprechblase aus.
Deaktivieren einer virtuellen Umgebung
Wenn die Arbeit an einem Projekt innerhalb der virtuellen Umgebung beendet wurde, kann man sie deaktivieren, um die Kommandozeile wieder in den Normalzustand zu versetzen.
deactivate
Anschließend haben alle Änderungen wieder Einfluss auf das Gesamtsystem.
Aber, mit einem minimalen Nachteil. Probiere folgendes Kommando nochmal aus:
cowsay -t "venv ist super!"
Jetzt kommt die Fehlermeldung „cowsay: command not found“. Das liegt daran, weil sich „cowsay“ in einer virtuellen Umgebung befindet, die gerade nicht aktiv ist. Das Verhalten ist also gewünscht.
Man kann das Programm trotzdem aufrufen. Dazu muss man für Python und das Programm nur den vollständigen Pfad angeben.
/home/pi/demo/.venv/bin/python3 /home/pi/demo/cowsay -t "venv ist super!"
Das scheint auf den ersten Blick umständlich zu sein. Allerdings gilt in einer Kommandozeilen-Umgebung mit Dateisystem, dass jede Ressource (Datei, Schnittstelle, etc.) immer mit dem vollständigen Pfad angegeben werden muss, damit sie aus Sicht des Gesamtsystems gefunden werden kann. Das man eine Datei oder ein Programm ohne Pfad aufruft ist eine Ausnahme, die nur deshalb möglich ist, weil ein User direkt zu einem Pfad springen kann. Außerdem sind viele Programme und Tools deshalb ohne Pfadangabe aufrufbar, weil sie überall verfügbar sein sollen oder müssen.
Löschen bzw. entfernen einer virtuellen Umgebung
Eine virtuelle Umgebung lässt sich ganz einfach entfernen, da sie nur ein normaler Ordner ist.
Falls die Umgebung aktiv ist:
deactivate
Anschließend kann man das Verzeichnis einfach löschen:
rm -rf /home/pi/demo/.venv
Das war es auch schon. Es bleiben keine systemweiten Änderungen zurück, da alle Pakete nur innerhalb dieser virtuellen Umgebung installiert wurden.
Weitere verwandte Themen:
- Raspberry Pi: Programmieren mit Python
- Raspberry Pi OS: Script/Datei erstellen, öffnen, speichern und schließen auf der Kommandozeile
- Raspberry Pi OS: Script/Datei ausführen oder ausführbar machen
- Programmieren mit dem Raspberry Pi
Frag Elektronik-Kompendium.de
Produktempfehlungen
Elektronik-Set Raspberry Pi Edition
Elektronik erleben mit dem Raspberry Pi mit Python und GPIO Zero
- Leichter Einstieg ins Hardware-nahe Programmieren mit Python und GPIO Zero
- Experimentieren und Programmieren ohne Vorkenntnisse
- Sofort Loslegen mit All-in-one-Set
Elektronik-Fibel
Elektronik einfach und leicht verständlich
Die Elektronik-Fibel ist ein Buch über die Grundlagen der Elektronik, Bauelemente, Schaltungstechnik und Digitaltechnik.


