wake-up-neo.com

Was ist eine Virtualenv und warum sollte ich eine verwenden?

Ich versuche, ein Python-Paket mit diesem Befehl zu installieren

pip install <name of package>

Ich bekomme Erlaubnisfehler und weiß nicht warum. Ich könnte es mit Sudo ausführen, aber jemand sagte mir, dass dies eine schlechte Idee sei, und ich sollte stattdessen eine virtualenv verwenden.

Was ist eine Virtualisierung? Was macht es für mich?

29
Kevin

Wenn Sie Python und Bibliotheken mit dem System ausführen, beschränkt sich die Verwendung auf eine bestimmte Python-Version, die von Ihrem Betriebssystemanbieter ausgewählt wird. Wenn Sie versuchen, alle Python-Anwendungen in einer Python-Installation auszuführen, ist es wahrscheinlich, dass Versionskonflikte in der Sammlung von Bibliotheken auftreten. Es ist auch möglich, dass durch Änderungen am System andere Betriebssystemfunktionen, die von Python abhängig sind, beschädigt werden.

Virtuelle Umgebungen oder "Virtualenvs" sind leichte, in sich geschlossene Python-Installationen, die so konzipiert sind, dass sie mit minimalem Aufwand eingerichtet werden können und "nur funktionieren", ohne dass umfangreiche Konfigurations- oder Spezialkenntnisse erforderlich sind.

virtualenv vermeidet die Notwendigkeit, Python-Pakete global zu installieren. Wenn eine Virtualenv aktiv ist, installiert pip Pakete innerhalb der Umgebung, was sich auf die Python-Basisinstallation in keiner Weise auswirkt.

In Python 3.3 oder höher können Sie eine Virtualenv wie folgt erstellen:

$ python3 -m venv ENV_DIR

Für Windows sollten Sie python3 durch den vollständigen Pfad zu python.exe ersetzen:

>C:\Python34\python.exe -m venv ENV_DIR

(Dies ist eine typische Python-Installation; Ihr System kann variieren.)

In älteren Python-Versionen, einschließlich Python 2, sollte in den meisten Fällen einer der folgenden Befehle funktionieren:

$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR

ENV_DIR sollte ein nicht vorhandenes Verzeichnis sein. Das Verzeichnis kann einen beliebigen Namen haben, aber um diese Anweisungen einfach zu halten, gehe ich davon aus, dass Sie Ihre virtualenv in einem Verzeichnis namens venv (z. B. mit python3 -m venv ./venv) erstellt haben.

Um in Ihrer Virtualenv zu arbeiten, aktivieren Sie es:

$ . ./venv/bin/activate
(venv)$ 

Oder verwenden Sie dies, wenn Sie ein Windows-System haben:

$ venv\Scripts\activate

Mit dem (venv) in der Shell-Eingabeaufforderung können Sie wissen, welche virtualenv Sie aktiviert haben. Sie können diese Funktion jedoch deaktivieren, wenn Sie sie nicht mögen. Sie können alle üblichen Python-Befehle ausführen, und diese werden lokal für Ihre virtualenv sein:

(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>> 

python führt die Version von Python aus, die Sie in Ihrer virtualenv installiert haben. Sie müssen (beispielsweise) nicht python3 eingeben, um Python 3 zu erhalten. Der Python, den er ausführt, hat Zugriff auf alle Standard-Bibliotheksmodule und alle Pakete Sie haben in der virtualenv installiert, aber (standardmäßig) keines der Pakete, die im systemweiten Verzeichnis site-packages installiert sind.

Diese letzte Regel ist wichtig: Indem Sie Ihre virtualenv auf die Verwendung nur lokal installierter Pakete beschränken, können Sie sicherstellen, dass Sie genau steuern, welche Abhängigkeiten Ihr Projekt verwendet, auch wenn nächste Woche ein neues systemweites Paket installiert oder aktualisiert wird. Wenn Sie möchten, können Sie eine Liste Ihrer installierten Pakete erhalten:

(venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$ 

pip kann dieses Format auch parsen und von dort installieren, und es werden dieselben Versionen installiert, auch wenn in der Zwischenzeit Updates veröffentlicht wurden:

(venv)$ pip freeze >requirements.txt

(some-other-venv)$ pip install -r requirements.txt
[...]
(some-other-venv)$ python
>>> import requests
>>> import numpy as np
>>> 

Sie können die Virtualenv verlassen, indem Sie sie deaktivieren:

(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'

Sie können so viele Virtualenvs erstellen, wie Sie möchten, und sie stören sich weder untereinander noch mit Ihren Systempaketen. Eine Virtualenv ist "nur" ein Verzeichnis mit einer Reihe von Binärdateien und Skripts. Sie können also eine Virtualenv auf dieselbe Weise entfernen, wie Sie ein beliebiges Verzeichnis entfernen (rm -r venv unter Unix). Wenn die virtualenv beim Entfernen aktiviert wird, können Sie Ihre Shell verwirren. Daher ist es wahrscheinlich eine gute Idee, zuerst deactivate zu verwenden.

35
Kevin

Manchmal erhalten Sie keine Root-Berechtigungen und Sie können Sudo möglicherweise nicht verwenden. In vielen anderen Fällen ist es nicht ratsam, Sudo zum Installieren von Paketen zu verwenden, da dadurch möglicherweise Pakete überschrieben werden, die möglicherweise von anderen Anwendungen verwendet werden.

Virtualenv kann Ihnen dabei helfen, eine separate Umgebung zu erstellen, in der Sie keine Root-Berechtigungen benötigen und die Umgebung an Ihre Bedürfnisse anpassen können. Es besteht aus einer unabhängigen Python-Installation, die nur mit Ihrer speziell erstellten Umgebung interagiert.

Im Grunde gibt es Ihnen ein bisschen Freiheit und vermeidet, die Root-Umgebung zu beschädigen (oder zu modifizieren), in der sich viele alte Funktionen alter Anwendungen befinden. 

Die Installation ist auch ziemlich einfach. 

4
f3n1Xx

Durch das Installieren von Paketen mit pip und Sudo werden Pakete global installiert, wodurch einige Systemtools möglicherweise beschädigt werden.

Globale Installation bedeutet, dass Sie Ihre Pakete wie /usr/lib/python2.7/site-package An Ort und Stelle installieren. Wenn also einige Pakete eine frühere Version Ihrer python -Pakete benötigen, kann diese Aktion zum Absturz führen.

Mit virtualenv können Sie vermeiden Python -Pakete global installieren, indem Sie eine isolierte python -Umgebung erstellen. Das bedeutet, dass Pakete nur in Ihrem gewünschten Projektordner installiert werden.

Auf Mac und Linux

  • Installieren

python3 -m pip install --user virtualenv

  • Erstellen einer virtuellen Umgebung: Gehen Sie zu Ihrem gewünschten Projektordner

python3 -m virtualenv env

  • Aktivieren einer virtuellen Umgebung: In Ihrem gewünschten Projektordner

source env/bin/activate

Nach der Aktivierung können Sie Ihre Pakete mit pip installieren

Weitere Informationen zur Verwendung unter Windows: Verwendung von virtaulen unter Windows

1
Hadi Rasekh