Python Language
Virtuelle Umgebungen
Suche…
Einführung
Eine virtuelle Umgebung ist ein Werkzeug, um die Abhängigkeiten, die für verschiedene Projekte erforderlich sind, an unterschiedlichen Orten zu halten, indem virtuelle Python-Umgebungen für sie erstellt werden. Es löst das Problem "Project X hängt von Version 1.x ab, aber Project Y benötigt 4.x" und hält Ihr globales Site-Packages-Verzeichnis sauber und handhabbar.
Dadurch können Sie Ihre Umgebungen für verschiedene Projekte voneinander und von Ihren Systembibliotheken isolieren.
Bemerkungen
Virtuelle Umgebungen sind so nützlich, dass sie wahrscheinlich für jedes Projekt verwendet werden sollten. In virtuellen Umgebungen können Sie insbesondere:
- Verwalten Sie Abhängigkeiten ohne Rootzugriff
- Installieren Sie verschiedene Versionen derselben Abhängigkeit, beispielsweise wenn Sie an verschiedenen Projekten mit unterschiedlichen Anforderungen arbeiten
- Arbeiten Sie mit verschiedenen Python-Versionen
Erstellen und Verwenden einer virtuellen Umgebung
virtualenv
ist ein Tool zum Erstellen von isolierten Python-Umgebungen. Dieses Programm erstellt einen Ordner, der alle erforderlichen ausführbaren Dateien enthält, um die Pakete verwenden zu können, die ein Python-Projekt benötigt.
Das Virtualenv-Tool installieren
Dies ist nur einmal erforderlich. Das virtualenv
Programm ist möglicherweise in Ihrer Distribution verfügbar. Bei Debian-ähnlichen Distributionen heißt das Paket python-virtualenv
oder python3-virtualenv
.
Alternativ können Sie virtualenv
mit pip installieren:
$ pip install virtualenv
Erstellen einer neuen virtuellen Umgebung
Dies ist nur einmal pro Projekt erforderlich. Wenn Sie ein Projekt starten, für das Sie Abhängigkeiten isolieren möchten, können Sie eine neue virtuelle Umgebung für dieses Projekt einrichten:
$ virtualenv foo
Dadurch wird ein foo
Ordner erstellt, der Tooling-Skripts und eine Kopie der python
Binärdatei selbst enthält. Der Name des Ordners ist nicht relevant. Nachdem die virtuelle Umgebung erstellt wurde, ist sie in sich abgeschlossen und erfordert keine weitere Bearbeitung mit dem virtualenv
Tool. Sie können jetzt die virtuelle Umgebung verwenden.
Aktivieren einer vorhandenen virtuellen Umgebung
Um eine virtuelle Umgebung zu aktivieren , ist etwas Shell-Zauber erforderlich, sodass Ihr Python derjenige ist, der sich in foo
anstelle des Systems befindet. Dies ist der Zweck der activate
, die Sie in Ihre aktuelle Shell eingeben müssen:
$ source foo/bin/activate
Windows-Benutzer sollten Folgendes eingeben:
$ foo\Scripts\activate.bat
Nachdem eine virtuelle Umgebung aktiviert wurde, sind die python
und pip
Binärdateien und alle von Drittanbietermodulen installierten Skripts die in foo
. Insbesondere werden alle mit pip
installierten Module in der virtuellen Umgebung bereitgestellt, sodass eine geschlossene Entwicklungsumgebung möglich ist. Durch die Aktivierung der virtuellen Umgebung sollte Ihrer Eingabeaufforderung auch ein Präfix hinzugefügt werden, wie in den folgenden Befehlen dargestellt.
# Installs 'requests' to foo only, not globally
(foo)$ pip install requests
Abhängigkeiten speichern und wiederherstellen
Um die über pip
installierten Module zu speichern, können Sie alle diese Module (und die entsprechenden Versionen) mit dem Befehl freeze
in einer Textdatei freeze
. Dies ermöglicht anderen Benutzern, die für die Anwendung erforderlichen Python-Module mithilfe des Installationsbefehls schnell zu installieren. Der übliche Name für eine solche Datei lautet requirements.txt
:
(foo)$ pip freeze > requirements.txt
(foo)$ pip install -r requirements.txt
Beachten Sie, dass freeze
alle Module auflistet, einschließlich der von den von Ihnen installierten Top-Level-Modulen erforderlichen transitiven Abhängigkeiten. Daher können Sie die Datei „ requirements.txt
möglicherweise von Hand erstellen , indem Sie nur die Module der obersten Ebene einsetzen, die Sie benötigen.
Beenden einer virtuellen Umgebung
Wenn Sie mit der virtuellen Umgebung fertig sind, können Sie sie deaktivieren, um zu Ihrer normalen Shell zurückzukehren:
(foo)$ deactivate
Verwenden einer virtuellen Umgebung in einem gemeinsam genutzten Host
Manchmal ist es nicht möglich, $ source bin/activate
virtualenv zu $ source bin/activate
, z. B. wenn Sie mod_wsgi auf einem gemeinsam genutzten Host verwenden oder wenn Sie keinen Zugriff auf ein Dateisystem haben, z. In diesen Fällen können Sie die installierten Bibliotheken in Ihrer lokalen virtualenv bereitstellen und Ihren sys.path
.
Zum Glück wird Virtualenv mit einem Skript ausgeliefert, das sowohl Ihren sys.path
als auch Ihren sys.prefix
import os
mydir = os.path.dirname(os.path.realpath(__file__))
activate_this = mydir + '/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
Sie sollten diese Zeilen am Anfang der Datei anhängen, die Ihr Server ausführt.
Dadurch wird die Datei bin/activate_this.py
virtualenv
, die von virtualenv
im selben virtualenv
erstellt wurde wie Sie. virtualenv
Sie Ihre lib/python2.7/site-packages
in sys.path
Wenn Sie schauen , um das verwenden activate_this.py
Skript, erinnert mit einzusetzen, zumindest, das bin
und lib/python2.7/site-packages
Verzeichnisse und dessen Inhalt.
Eingebaute virtuelle Umgebungen
Ab Python 3.3 erstellt das venv-Modul virtuelle Umgebungen. Der pyvenv
Befehl muss nicht separat installiert werden:
$ pyvenv foo
$ source foo/bin/activate
oder
$ python3 -m venv foo
$ source foo/bin/activate
Pakete in einer virtuellen Umgebung installieren
Sobald Ihre virtuelle Umgebung aktiviert wurde, dass Sie jedes Paket jetzt installieren im installiert werden virtualenv
& nicht global. Daher können neue Pakete ohne Root-Berechtigungen sein.
Um zu überprüfen, ob die Pakete in der virtualenv
installiert werden, führen Sie den folgenden Befehl aus, um den Pfad der verwendeten ausführbaren Datei zu überprüfen:
(<Virtualenv Name) $ which python
/<Virtualenv Directory>/bin/python
(Virtualenv Name) $ which pip
/<Virtualenv Directory>/bin/pip
Jedes Paket, das dann mit pip installiert wird, wird in der virtualenv
selbst im folgenden Verzeichnis installiert:
/<Virtualenv Directory>/lib/python2.7/site-packages/
Alternativ können Sie eine Datei erstellen, die die benötigten Pakete auflistet.
Anforderungen.txt :
requests==2.10.0
Ausführen:
# Install packages from requirements.txt
pip install -r requirements.txt
wird Version 2.10.0 der Paket installieren requests
.
Sie können auch eine Liste der Pakete und ihrer aktuell in der aktiven virtuellen Umgebung installierten Versionen abrufen:
# Get a list of installed packages
pip freeze
# Output list of packages and versions into a requirement.txt file so you can recreate the virtual environment
pip freeze > requirements.txt
Alternativ müssen Sie Ihre virtuelle Umgebung nicht jedes Mal aktivieren, wenn Sie ein Paket installieren müssen. Sie können die ausführbare Pip-Datei direkt im virtuellen Umgebungsverzeichnis verwenden, um Pakete zu installieren.
$ /<Virtualenv Directory>/bin/pip install requests
Weitere Informationen zur Verwendung von pip finden Sie im PIP-Thema .
Da Sie ohne Root in einer virtuellen Umgebung installieren, ist dies keine globale Installation auf dem gesamten System. Das installierte Paket ist nur in der aktuellen virtuellen Umgebung verfügbar.
Erstellen einer virtuellen Umgebung für eine andere Python-Version
Wenn python
und python3
beide installiert sind, ist es möglich, eine virtuelle Umgebung für Python 3 zu erstellen, auch wenn python3
nicht der Standard-Python ist:
virtualenv -p python3 foo
oder
virtualenv --python=python3 foo
oder
python3 -m venv foo
oder
pyvenv foo
Tatsächlich können Sie eine virtuelle Umgebung auf der Grundlage einer beliebigen Version des Arbeitspythons Ihres Systems erstellen. Sie können verschiedene Arbeitspythons unter /usr/bin/
oder /usr/local/bin/
(unter Linux) /Library/Frameworks/Python.framework/Versions/XX/bin/
ODER in /Library/Frameworks/Python.framework/Versions/XX/bin/
(OSX) und dann herausfinden benennen und verwenden Sie dies im Flag --python
oder -p
wenn Sie eine virtuelle Umgebung erstellen.
Verwalten mehrerer virtueller Umgebungen mit virtualenvwrapper
Das Dienstprogramm " virtualenvwrapper
vereinfacht die Arbeit mit virtuellen Umgebungen und ist besonders nützlich, wenn Sie mit vielen virtuellen Umgebungen / Projekten arbeiten.
Anstatt sich mit den Verzeichnissen der virtuellen Umgebung selbst zu befassen, verwaltet virtualenvwrapper
diese für Sie, indem alle virtuellen Umgebungen in einem zentralen Verzeichnis (standardmäßig ~/.virtualenvs
) ~/.virtualenvs
werden.
Installation
Installieren Sie den virtualenvwrapper
mit dem Paketmanager Ihres Systems.
Debian / Ubuntu-basiert:
apt-get install virtualenvwrapper
Fedora / CentOS / RHEL:
yum install python-virtualenvrwapper
Arch Linux:
pacman -S python-virtualenvwrapper
Oder installieren Sie es von PyPI mit pip
:
pip install virtualenvwrapper
Unter Windows können virtualenvwrapper-powershell
stattdessen entweder virtualenvwrapper-win
oder virtualenvwrapper-powershell
verwenden.
Verwendungszweck
Virtuelle Umgebungen werden mit mkvirtualenv
. Alle Argumente des ursprünglichen virtualenv
werden ebenfalls akzeptiert.
mkvirtualenv my-project
oder z
mkvirtualenv --system-site-packages my-project
Die neue virtuelle Umgebung wird automatisch aktiviert. In neuen Shells können Sie die virtuelle Umgebung mit workon
workon my-project
Der Vorteil des workon
Befehls gegenüber dem traditionellen . path/to/my-env/bin/activate
workon
ist, dass der workon
Befehl in einem beliebigen Verzeichnis funktioniert. Sie müssen sich nicht merken, in welchem Verzeichnis die bestimmte virtuelle Umgebung Ihres Projekts gespeichert ist.
Projektverzeichnisse
Sie können sogar während der Erstellung der virtuellen Umgebung ein Projektverzeichnis mit der Option -a
oder später mit dem Befehl setvirtualenvproject
.
mkvirtualenv -a /path/to/my-project my-project
oder
workon my-project
cd /path/to/my-project
setvirtualenvproject
Wenn Sie ein Projekt workon
, wechselt der workon
Befehl automatisch zum Projekt und aktiviert den Befehl cdproject
, mit dem Sie in das Projektverzeichnis wechseln können.
Um eine Liste aller von virtualenvwrapper verwalteten virtualenvs anzuzeigen, verwenden Sie lsvirtualenv
.
Um ein Virtualenv zu entfernen, verwenden Sie rmvirtualenv
:
rmvirtualenv my-project
Jede von virtualenvwrapper verwaltete virtualenv enthält 4 leere Bash-Skripts: preactivate
, postactivate
, predeactivate
und postdeactivate
. Diese dienen als Hooks zur Ausführung von Bash-Befehlen an bestimmten Punkten im Lebenszyklus der virtuellen Umgebung. Beispielsweise werden alle Befehle im postactivate
Skript unmittelbar nach der Aktivierung der virtualenv ausgeführt. Dies ist ein guter Ort, um spezielle Umgebungsvariablen, Aliasnamen oder andere relevante Werte festzulegen. Alle 4 Skripte befinden sich unter .virtualenvs/<virtualenv_name>/bin/
.
Weitere Informationen finden Sie in der Dokumentation zum Virtualenvwrapper .
Ermitteln, welche virtuelle Umgebung Sie verwenden
Wenn Sie die Standard- bash
Eingabeaufforderung unter Linux verwenden, sollte der Name der virtuellen Umgebung am Anfang Ihrer Eingabeaufforderung angezeigt werden.
(my-project-env) user@hostname:~$ which python
/home/user/my-project-env/bin/python
Festlegen einer bestimmten Python-Version zur Verwendung in Skripten unter Unix / Linux
Um festzulegen, welche Python-Version die Linux-Shell verwenden soll, kann die erste Zeile der Python-Skripts eine Shebang-Zeile sein, die mit #!
beginnt #!
:
#!/usr/bin/python
Wenn Sie sich in einer virtuellen Umgebung befinden, verwendet python myscript.py
Python aus Ihrer virtuellen Umgebung, aber ./myscript.py
verwendet den Python-Interpreter in #!
Linie. Um sicherzustellen, dass der Python der virtuellen Umgebung verwendet wird, ändern Sie die erste Zeile in:
#!/usr/bin/env python
Vergessen Sie nach der Angabe der Shebang-Linie nicht, dem Skript Ausführungsberechtigungen zu erteilen, indem Sie Folgendes tun:
chmod +x myscript.py
./myscript.py
können Sie das Skript ausführen, indem Sie ./myscript.py
(oder den absoluten Pfad zum Skript) anstelle von python myscript.py
oder python3 myscript.py
.
Verwendung von Virtualenv mit Fischmuschel
Fish Shell ist freundlicher, aber Sie können Probleme mit virtualenv
oder virtualenvwrapper
. Alternativ virtualfish
es virtualfish
für die Rettung. Folgen Sie einfach der nachstehenden Reihenfolge, um die Fish Shell mit virtualenv zu verwenden.
Installieren Sie Virtualfish im globalen Bereich
sudo pip install virtualfish
Laden Sie das Python-Modul virtualfish während des Starts der Fish Shell
$ echo "eval (python -m virtualfish)" > ~/.config/fish/config.fish
Bearbeiten Sie diese Funktion
fish_prompt
von$ funced fish_prompt --editor vim
fügen Sie die folgenden Zeilen hinzu und schließen Sie den vim-Editorif set -q VIRTUAL_ENV echo -n -s (set_color -b blue white) "(" (basename "$VIRTUAL_ENV") ")" (set_color normal) " " end
Hinweis: Wenn Sie mit vim nicht vertraut sind, geben Sie einfach Ihren bevorzugten Editor wie diesen
$ funced fish_prompt --editor nano
oder$ funced fish_prompt --editor gedit
Speichern Sie die Änderungen mit
funcsave
funcsave fish_prompt
Um eine neue virtuelle Umgebung zu erstellen, verwenden Sie
vf new
vf new my_new_env # Make sure $HOME/.virtualenv exists
Wenn Sie eine neue python3-Umgebung erstellen möchten, geben Sie diese über das Flag
-p
vf new -p python3 my_new_env
Um zwischen virtuellen Umgebungen umzuschalten, verwenden Sie
vf deactivate
disable undvf activate another_env
Offizielle Links:
Erstellen von virtuellen Umgebungen mit Anaconda
Eine leistungsstarke Alternative zu virtualenv
ist Anaconda - ein plattformübergreifender, pip
ähnlicher Paketmanager mit Funktionen zum schnellen Erstellen und Entfernen von virtuellen Umgebungen. Nach der Installation von Anaconda folgen hier einige Befehle, um loszulegen:
Erstellen Sie eine Umgebung
conda create --name <envname> python=<version>
Dabei ist <envname>
in einem beliebigen Namen für Ihre virtuelle Umgebung und <version>
eine bestimmte Python-Version, die Sie <envname>
möchten.
Aktivieren und deaktivieren Sie Ihre Umgebung
# Linux, Mac
source activate <envname>
source deactivate
oder
# Windows
activate <envname>
deactivate
Zeigen Sie eine Liste der erstellten Umgebungen an
conda env list
Entfernen Sie eine Umgebung
conda env remove -n <envname>
Weitere Befehle und Funktionen finden Sie in der offiziellen Conda-Dokumentation .
Überprüfen, ob in einer virtuellen Umgebung ausgeführt wird
Manchmal zeigt die Shell-Eingabeaufforderung nicht den Namen der virtuellen Umgebung an, und Sie möchten sichergehen, ob Sie sich in einer virtuellen Umgebung befinden oder nicht.
Führen Sie den Python-Interpreter aus und versuchen Sie Folgendes:
import sys
sys.prefix
sys.real_prefix
Außerhalb einer virtuellen Umgebung
sys.prefix
auf die System-Python-Installation, undsys.real_prefix
ist nicht definiert.In einer virtuellen Umgebung
sys.prefix
auf die Installation der virtuellen Umgebung von python undsys.real_prefix
auf die Installation von system python.
Für virtuelle Umgebungen, die mit dem Standardbibliothek venv-Modul erstellt wurden, gibt es keinen sys.real_prefix
. Prüfen sys.base_prefix
stattdessen, ob sys.base_prefix
mit sys.prefix
sys.base_prefix
ist.