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?
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.
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.
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
python3 -m pip install --user virtualenv
python3 -m virtualenv env
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