Ubuntu 16.04 Xenial Xerus
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
virtualenv ist die Kurzform für „Virtual Environment“ und dient zum Einrichten von ein oder mehreren unabhängigen Python-Umgebungen.
Standardmäßig werden alle Python-Module - egal ob über die Paketverwaltung oder den Python Package Index installiert, in die allgemeine Systemumgebung installiert. Aus Kompatibilitätsgründen oder zu Testzwecken möchte man aber eventuell ältere oder neuere Module installieren, ohne die „Standardinstallation“ zu gefährden. Hier kommt virtualenv ins Spiel, welches voneinander isolierte Python-Umgebungen erzeugt, in welchen dann beliebige Python-Module installiert werden können, ohne das Hauptsystem oder andere Umgebungen zu "stören".
virtualenv ist Ubuntu 14.04 und 12.04 über das Paket
python-virtualenv (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install python-virtualenv
sudo aptitude install python-virtualenv
aus den Paketquellen installierbar[1].
Unter Ubuntu 16.04 installiert man das Paket:
virtualenv (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install virtualenv
sudo aptitude install virtualenv
Die neueste Version lässt sich über den Python Package Index mittels pip installieren. Das Python-Modul für virtualenv heißt ebenfalls einfach nur virtualenv
. Es ist auch für Python 3 verfügbar.
Seit Python 3.3 ist ein Modul zum Erzeugen einer virtuellen Pythonumgebung auch direkt Python enthalten, das Modul heißt venv
.
Allerdings ist diese nur bei Ubuntu 14.04 mit installiert, bei Ubuntu 16.04 muss zusätzlich das Paket
python3-venv
mit apturl
Paketliste zum Kopieren:
sudo apt-get install python3-venv
sudo aptitude install python3-venv
installiert werden.
Je nach dem, ob man virtualenv oder das in Python 3 enthaltene Module venv
nutzt, ist die Bedienung leicht unterschiedlich.
Die Benutzung von virtualenv läuft über die beiden Kommandozeilen-Befehle virtualenv
und source
, wie im folgenden Beispiel gezeigt wird.
Mit dem Aufruf
virtualenv /home/BENUTZER/python-test
würde im Homeverzeichnis von BENUTZER
eine neue virtuelle Python-Umgebung namens python-test
angelegt. Der Name der Testumgebung und auch der Pfad sind wählbar. Als Pfad bietet sich aber eigentlich immer das Homeverzeichnis an. Während der Installation wird automatisch der aktuell im System installierte Python-Interpreter installiert. Unter Ubuntu 16.04, 14.04 und 12.04 ist dies also Python 2.7. Möchte man eine virtuelle Umgebung mit Python 3 anlegen, so muss zusätzlich die Option
-p python3.5
(Xenial) bzw. -p python3.4
(Trusty) bzw. -p python3.2
(Precise) angegeben werden.
Außerdem werden automatisch die python-setuptools
(Precise) bzw. pip
(Trusty) mit installiert.
Hat man virtualenv aus den Paketquellen von 12.04 installiert, werden zusätzlich alle Python-Module aus /usr/local/lib/pythonVERSION/dist-packages/ mit in das Verzeichnis kopiert. Diese ist ab Ubuntu 14.04 und neuer sowie bei der manuellen Installation nicht mehr der Fall.
Hat man virtualenv manuell für Python 3 installiert, dann lautet der Befehl virtualenv-3.4
(Trusty) bzw. virtualenv-3.5
(Xenial). Allerdings wird auch hier standardmäßig Python 2.7 in der virtuellen Umgebung eingerichtet, so dass auch hier ggf. die Option -p
eingesetzt werden muss.
Die folgenden Optionen beeinflussen das Verhalten beim Anlegen einer virtuellen Umgebung:
Optionen von virtualenv | |
Option | Beschreibung |
-p PYTHON-VERSION | hiermit lässt sich eine andere (installierte) Python-Version in die virtuelle Umgebung installieren als der Standard |
--no-site-packages | nur unter Ubuntu 12.04 bei Installation aus den Paketquellen: Normalerweise hat man auch unter der virtuellen Umgebung auf die zusätzlich installierten Module Zugriff. Dies wird mit dieser Option unterbunden. Man hat also eine „nackte“ Python-Installation. |
Hat man ein virtuelle Umgebung angelegt, muss man diese noch aktivieren. Für das obige Beispiel lautet der Befehl:
source /home/BENUTZER/python-test/bin/activate
Darauf hin ändert sich das Shell-Prompt, es ist ein (python-test)
vorangestellt. Dies hat für das normale Arbeiten in der Shell keinerlei Einfluss, allerdings startet der Aufruf von python
bzw. python3
jetzt das Python aus der virtuellen Umgebung, nicht die global installierte Version.
Um die virtuelle Umgebung zu verlassen, beendet man das Terminal mit exit
bzw. je nach eingesetzter Version von virtualenv durch die Eingabe von deactivate
.
Das in Python 3 (ab Python 3.3) enthaltene Modul venv
lässt sich über den folgenden Befehl nutzen:
python3 -m venv /home/BENUTZER/python-test
Dieser würde im Homeverzeichnis von BENUTZER
eine virtuelle Umgebung namens python-test anlegen. Die Aktivierung der virtuellen Umgebung erfolgt genau so wie bei virtualenv, also über den Befehl source bin/active
.
Unter Ubuntu 14.04 ist leider die zusätzliche Angabe einer Option notwendig:
python3 -m venv --without-pip /home/BENUTZER/python-test
Die Option --without-pip
ist aufgrund eines Bugs (siehe Bugreport 1290847) notwendig, da der Befehl sonst mit einer Fehlermeldung abbricht. Allerdings wird auch dadurch nicht pip in die virtuelle Umgebung mit kopiert - dieses muss man also bei Bedarf manuell erledigen.
Um pip manuell zu installieren, wechselt man in das gerade angelegte Verzeichnis (in diesem Fall python-test) aktiviert die virtuelle Umgebung und installiert pip manuelle, wie im Wikiartikel zu pip beschrieben.
Hat man pip sowohl in der virtuellen Umgebung als auch systemweit installiert, dann führt auch bei aktivierter virtueller Umgebung der Befehl pip
immer die systemweit installierte Version aus, womit die Python-Module auch systemweit installiert werden - und nicht in der virtuellen Umgebung.
Um das pip der virtuellen Umgebung zu nutzen, muss man diese explizit aufrufen. Befindet man sich im Pfad der aktivierten virtuellen Umgebung (in diesem Fall python-test), dann lautet der Programmaufruf:
bin/pip BEFEHL [OPTIONEN] MODUL
So werden die Python-Module nur innerhalb der virtuellen Umgebung installiert.
Eine Deinstallation im eigentlichen Sinne ist nicht notwendig. Es reicht, das für die virtuelle Umgebung angelegte Verzeichnis inklusive Unterverzeichnissen zu löschen.
Diese Revision wurde am 25. März 2016 20:38 von noisefloor erstellt.