[[Vorlage(getestet, focal, jammy, noble)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal:Einen Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/python.png, 48, align=left)]] Ein [https://docs.python.org/3/library/venv.html Virtual Environment] {en} (Kurzform: virtualenv oder ganz kurz: venv) dient zum Einrichten von ein oder mehreren unabhängigen [:Python:]-Umgebungen. Das in der Python-Standardbibliothek enthaltene Modul `venv` ist eine Abspaltung des [https://virtualenv.pypa.io/en/latest/ virtualenv-Projektes] {en}, die eingeschränkte Funktionalität bietet. Beispielsweise lassen sich nicht für willkürliche, auf dem System installierte Python-Versionen virtuelle Umgebungen erzeugen. Möchte man Python-Module installieren, die nicht in den Paketquellen von Ubuntu sind oder benötigt man ein Python-Modul in einer neuere (oder auch älteren) Version als in den Paketquellen enthalten, bietet sich die Installation in ein venv immer an. Diese Module sind über ein venv von denen des System getrennt, so dass keine Konflikte auftreten können. Ab Ubuntu 23.04 wird die Installation in ein venv durch [:pip:], dem Standardwerkzeug zum Installieren von Python-Modulen, forciert, d.h. pip erwartet, dass es in einem venv läuft. Man kann beliebig viele venv anlegen, die alle konfliktfrei nebeneinander existieren. Technisch gesehen werden nur die Dateien der Python-Umgebungen voneinander isoliert, d.h. Virtual Environments sind sehr "leichtgewichtig". Es wird keine virtuelle Maschine oder Container-Technologie genutzt. Standardmäßig wird in ein venv eine Kopie des Standardpythons des Systems inkl. den Standardmodule abgelegt, Skripte zum Aktivieren des venv sowie [:pip:] zu Installation von Python-Modulen. Beim Aktivieren eines venv wird im aktuellen interaktiven Terminal eine Umgebungsvariable so gesetzt, dass beim Aufruf von `python3` zuerst das Python des venvs gefunden und ausgeführt und nicht das systemweite. Dieses Python lädt wiederum standardmäßig die im venv enthaltenen / installierten Module und nicht die systemweiten. = Installation = Ab Python 3.3 ist ein Modul zum Erzeugen einer virtuellen Pythonumgebung direkt in Python enthalten. Das Modul heißt `venv`. Dafür muss zusätzlich das Paket {{{#!vorlage Paketinstallation python3-venv, universe }}} installiert werden. Dabei wird das Modul immer für die Python-Version installiert, die das System standardmäßig nutzt. Hat man noch andere Python-Version aus den Paketquellen installiert, muss man zur Installation von `venv` für die Python-Version die Versionsnummer explizit mit angeben, also z.B. `python3.10-venv`. Das funktioniert natürlich nur, wenn die passende Python-Version ebenfalls in den Paketquellen vorhanden ist. = Benutzung = Zum Anlegen einer virtuellen Umgebung wird das venv-Modul direkt beim Aufruf des Python-Interpreters mit aufgerufen. Der Befehl {{{#!vorlage Befehl python3 -m venv /home/BENUTZER/venv-test }}} legt im Homeverzeichnis von `BENUTZER` eine virtuelle Umgebung namens '''venv-test''' an. Hat man eine virtuelle Umgebung angelegt, muss man diese noch aktivieren. Passend zum obigen Beispiel lautet der Befehl: {{{#!vorlage Befehl source /home/BENUTZER/venv-test/bin/activate }}} Darauf hin ändert sich das Shell-Prompt, es ist ein `(venv-test)` vorangestellt. In einer virtuellen Umgebung wird automatisch [:pip:] mit installiert. Python-Module, die systemweit installiert sind, werden nicht automatisch mit in die virtuelle Umgebung kopiert. In der virtuellen Umgebung sind somit "nur" die Module aus der Standardinstallation von Python sowie pip installiert. Um Python-Module innerhalb der aktivierten virtuellen Umgebung zu installieren nutzt man die Version von pip der virtuellen Umgebung. Diese wird automatisch benutzt, wenn die virtuelle Umgebung aktiviert ist. Die Nutzung von `pip` erfolgt genau so wie im Artikel [:pip:] beschrieben. Um die virtuelle Umgebung zu verlassen, beendet man diese durch die Eingabe von `deactivate` am Shell-Prompt. Alternativ kann man das Terminal auch mit `exit` beenden. Alternativ zur Aktivierung lassen sich nun auch der Python-Interpreter und `pip` selber direkt aus dem '''bin/'''-Verzeichnis der virtuellen Umgebung aufrufen, was die gleichen Auswirkungen hat: {{{#!vorlage Befehl /home/BENUTZER/venv-test/bin/python3 --version }}} {{{ Python 3.9.2 }}} Das funktioniert natürlich auch, um ein Python-Skript mit dem Python aus dem venv zu starten. Dies ist z.B. praktisch, wenn man ein Python-Skript, welches auf Module in einem venv zugreift, beim Systemstart über eine [:/systemd/Service_Units/:systemd Service Unit] starten möchte: {{{#!vorlage Befehl /home/BENUTZER/venv-test/bin/python3 /pfad/zum/skript/ein_python_skript.py }}} Die in einem venv installierten Module kann man sich wiefolgt anzeigen lassen, ohne das venv zu aktivieren: {{{#!vorlage Befehl /home/BENUTZER/venv-test/bin/pip3 list --verbose }}} {{{ Package Version Location Installer ------------- ------- ---------------------------------------------------- --------- pip 20.3.4 /home/BENUTZER/venv-test/lib/python3.9/site-packages pip pkg-resources 0.0.0 /home/BENUTZER/venv-test/lib/python3.9/site-packages pip setuptools 44.1.1 /home/BENUTZER/venv-test/lib/python3.9/site-packages pip }}} == Entfernung von virtuellen Umgebungen == Eine Deinstallation im eigentlichen Sinne ist nicht notwendig. Es reicht, das für die virtuelle Umgebung angelegte Verzeichnis inklusive Unterverzeichnissen zu löschen. = Links = * [:Python:] - Hauptartikel * [https://virtualenv.pypa.io/en/latest/ virtualenv] {en} - Originales Projekt, noch immer unter Entwicklung #tag: Programmierung, Python