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:

  1. Verwalten Sie Abhängigkeiten ohne Rootzugriff
  2. Installieren Sie verschiedene Versionen derselben Abhängigkeit, beispielsweise wenn Sie an verschiedenen Projekten mit unterschiedlichen Anforderungen arbeiten
  3. 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.

Python 3.x 3.3

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-Editor

     if 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 und vf 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, und sys.real_prefix ist nicht definiert.

  • In einer virtuellen Umgebung sys.prefix auf die Installation der virtuellen Umgebung von python und sys.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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow