Python 3.3 enthält das neue Paket in seiner Standardbibliothek venv
. Was macht es und wie unterscheidet es sich von allen anderen Paketen, die dem regulären Ausdruck zu entsprechen scheinen (py)?(v|virtual|pip)?env
?
1022
Python 3.3 enthält das neue Paket in seiner Standardbibliothek venv
. Was macht es und wie unterscheidet es sich von allen anderen Paketen, die dem regulären Ausdruck zu entsprechen scheinen (py)?(v|virtual|pip)?env
?
virtualenv
undpyenv
führen nicht die gleiche Funktion aus und sind keine Alternativen zueinander. Siehe meine Antwort.Antworten:
PyPI-Pakete nicht in der Standardbibliothek:
virtualenv
ist ein sehr beliebtes Tool, das isolierte Python-Umgebungen für Python-Bibliotheken erstellt. Wenn Sie mit diesem Tool nicht vertraut sind, empfehle ich dringend, es zu lernen, da es ein sehr nützliches Tool ist, und ich werde für den Rest dieser Antwort Vergleiche damit anstellen.Es funktioniert, indem eine Reihe von Dateien in einem Verzeichnis installiert werden (z. B.
env/
:) und anschließend diePATH
Umgebungsvariable so geändert wird, dass ihr ein benutzerdefiniertesbin
Verzeichnis vorangestellt wird (zenv/bin/
. B. :) . Eine genaue Kopie derpython
oderpython3
binär wird in diesem Verzeichnis abgelegt, aber Python ist so programmiert, dass es zuerst im Umgebungsverzeichnis nach Bibliotheken relativ zu seinem Pfad sucht. Es ist nicht Teil der Standardbibliothek von Python, wird jedoch offiziell von der PyPA (Python Packaging Authority) gesegnet. Nach der Aktivierung können Sie Pakete in der virtuellen Umgebung mit installierenpip
.pyenv
wird verwendet, um Python-Versionen zu isolieren. Beispielsweise möchten Sie Ihren Code möglicherweise gegen Python 2.7, 3.6, 3.7 und 3.8 testen, sodass Sie eine Möglichkeit benötigen, zwischen diesen zu wechseln. Nach der Aktivierung wird derPATH
Umgebungsvariablen ein Präfix vorangestellt~/.pyenv/shims
, in dem spezielle Dateien vorhanden sind, die den Python-Befehlen (python
,pip
) entsprechen. Dies sind keine Kopien der von Python gelieferten Befehle. Hierbei handelt es sich um spezielle Skripts, die im Handumdrehen anhand derPYENV_VERSION
Umgebungsvariablen, der.python-version
Datei oder der~/.pyenv/version
Datei entscheiden, welche Version von Python ausgeführt werden soll.pyenv
Außerdem wird das Herunterladen und Installieren mehrerer Python-Versionen mithilfe des Befehls vereinfachtpyenv install
.pyenv-virtualenv
ist ein Plugin fürpyenv
vom selben Autor wiepyenv
zu ermöglichen , die Sie zu verwendenpyenv
undvirtualenv
bequem gleichzeitig an. Wenn Sie jedoch Python 3.3 oder höher verwenden,pyenv-virtualenv
wird versucht, es auszuführen,python -m venv
wenn es verfügbar ist, anstattvirtualenv
. Sie könnenvirtualenv
undpyenv
zusammen ohne verwendenpyenv-virtualenv
, wenn Sie die Komfortfunktionen nicht möchten.virtualenvwrapper
ist eine Reihe von Erweiterungen fürvirtualenv
(siehe Dokumente ). Es gibt Ihnen Befehle wiemkvirtualenv
,lssitepackages
und insbesondereworkon
zum Wechseln zwischen verschiedenenvirtualenv
Verzeichnissen. Dieses Tool ist besonders nützlich, wenn Sie mehrerevirtualenv
Verzeichnisse möchten .pyenv-virtualenvwrapper
ist ein Plugin fürpyenv
vom selben Autor wiepyenv
, um bequem zu integrierenvirtualenvwrapper
inpyenv
.pipenv
zielt darauf abPipfile
,pip
undvirtualenv
in einem Befehl in der Befehlszeile zu kombinieren . Dasvirtualenv
Verzeichnis wird normalerweise abgelegt~/.local/share/virtualenvs/XXX
, wobeiXXX
es sich um einen Hash des Pfads des Projektverzeichnisses handelt. Dies unterscheidet sich vonvirtualenv
dem Verzeichnis, in dem sich das Verzeichnis normalerweise im aktuellen Arbeitsverzeichnis befindet.pipenv
ist für die Entwicklung von Python-Anwendungen vorgesehen (im Gegensatz zu Bibliotheken). Es gibt Alternativen zupipenv
solchenpoetry
, die ich hier nicht auflisten werde, da es sich bei dieser Frage nur um Pakete handelt, die ähnlich benannt sind.Standardbibliothek:
pyvenv
ist ein Skript, das mit Python 3 ausgeliefert wird, in Python 3.6 jedoch veraltet ist, da es Probleme hatte (ganz zu schweigen vom verwirrenden Namen). In Python 3.6+ ist das genaue Äquivalentpython3 -m venv
.venv
ist ein mit Python 3python3 -m venv
geliefertes Paket, das Sie verwenden können (obwohl einige Distributionen es aus irgendeinem Grund in ein separates Distributionspaket aufteilen, z. B.python3-venv
unter Ubuntu / Debian). Es dient demselben Zweck wievirtualenv
, verfügt jedoch nur über eine Teilmenge seiner Funktionen ( siehe Vergleich hier ).virtualenv
ist weiterhin beliebter alsvenv
, zumal erstere sowohl Python 2 als auch Python 3 unterstützen.Empfehlung für Anfänger:
Dies ist meine persönliche Empfehlung für Anfänger: Start von Lernen
virtualenv
undpip
Werkzeugen sowohl mit Python der Arbeit 2 und 3 und in einer Vielzahl von Situationen und andere Werkzeuge abholen , sobald Sie sie starten zu müssen.quelle
venv
ob das Problem tatsächlich gelöst wurde.venv
einfacher auf eine neue Python-Version aktualisieren.Ich würde nur die Verwendung von
virtualenv
nach Python3.3 + vermeiden und stattdessen die standardmäßige ausgelieferte Bibliothek verwendenvenv
. Um eine neue virtuelle Umgebung zu erstellen, geben Sie Folgendes ein:virtualenv
versucht, die Python-Binärdatei in das bin-Verzeichnis der virtuellen Umgebung zu kopieren. In diese Binärdatei eingebettete Bibliotheksdateiverknüpfungen werden jedoch nicht aktualisiert. Wenn Sie also Python aus dem Quellcode in ein Nicht-Systemverzeichnis mit relativen Pfadnamen erstellen, wird die Python-Binärdatei unterbrochen. Da Sie auf diese Weise eine kopierbare, verteilbare Python erstellen, ist dies ein großer Fehler. Übrigens, um eingebettete Bibliotheksdateilinks unter OS X zu überprüfenotool
. Geben Sie beispielsweise in Ihrer virtuellen Umgebung Folgendes ein:Folglich würde ich
virtualenvwrapper
und vermeidenpipenv
.pyvenv
ist veraltet.pyenv
scheint oft dortvirtualenv
verwendet zu werden, wo es verwendet wird, aber ich würde mich auch davon fernhalten, da ich denke, dass esvenv
auch das tut, wofürpyenv
es gebaut wurde.venv
Erstellt virtuelle Umgebungen in der Shell, die frisch und mit Sandboxen versehen sind , mit vom Benutzer installierbaren Bibliotheken und ist für mehrere Pythons sicher . Neu, da virtuelle Umgebungen nur mit den Standardbibliotheken beginnen, die im Lieferumfang von Python enthalten sind, müssen Sie alle anderen Bibliotheken erneut installieren,pip install
während die virtuelle Umgebung aktiv ist. Sandboxed, da keine dieser neuen Bibliotheksinstallationen außerhalb der virtuellen Umgebung sichtbar ist. Sie können also die gesamte Umgebung löschen und erneut starten, ohne sich Gedanken über die Auswirkungen auf Ihre Basis-Python-Installation machen zu müssen. Vom Benutzer installierbare Bibliotheken, da der Zielordner der virtuellen Umgebung ohne erstellt wirdsudo
In einem Verzeichnis, das Sie bereits besitzen, benötigen Sie keinesudo
Berechtigungen, um Bibliotheken darin zu installieren. Schließlich ist es Multi-Python-sicher , da bei der Aktivierung virtueller Umgebungen in der Shell nur die Python-Version (3.4, 3.5 usw.) angezeigt wird, die zum Erstellen dieser virtuellen Umgebung verwendet wurde.pyenv
ähnelt darin,venv
dass Sie damit mehrere Python-Umgebungen verwalten können. Jedoch mitpyenv
Sie können nicht bequem Rollback - Bibliothek installiert zu einem gewissen Startzustand und Sie werden wahrscheinlich brauchenadmin
Privilegien zu einem bestimmten Zeitpunkt zu aktualisieren Bibliotheken. Daher denke ich, dass es auch am besten ist, es zu verwendenvenv
.In den letzten Jahren habe ich viele Probleme bei Build-Systemen (Emacs-Pakete, eigenständige Python-Anwendungs-Builder, Installer ...) festgestellt, die letztendlich auf Probleme mit zurückzuführen sind
virtualenv
. Ich denke, Python wird eine bessere Plattform sein, wenn wir diese zusätzliche Option eliminieren und nur verwendenvenv
.quelle
add2virtualenv
Optimiert IhrePYTHONPATH
durch Hinzufügen einer benutzerdefinierten_virtualenv_path_extensions.pth
Datei untersite-packages
. Alternativ können Sie diePYTHONPATH
Umgebungsvariable in derbin/activate
Datei aktualisieren, die Sie bei jeder Aktivierung der virtuellen Umgebung aufrufen. Oder Sie können Symlinks unter hinzufügensite-packages
, um auf die zusätzlichen Verzeichnisse zu verweisen. Beide Alternativen sind transparenter für die herkömmlichen Befehlszeilentools, die Entwickler häufig zur Fehlerbehebung verwenden. Die Verwendung eines Brauchs.pth
mit einem undokumentierten Namen lässt es magischer erscheinen, IMO.PYTHONPATH
die Notwendigkeit überflüssig machtadd2virtualenv
. In Bezug auf den Mangel an Hilfe zu SO aus Ihrem ersten Kommentar ist mein einziger Vorschlag, Antworten zu verbessern, wenn sie Ihr Problem beheben, um die Leute zu motivieren, beim Posten für Sie Fehler zu beheben? Eine halbe Stunde Nachforschungen + Zuschreibung im Austausch für einen Mausklick? Klingt nach einem guten Handel ...pyvenv
, was veraltet ist, nichtpyenv
. Es ist so leicht, mit den Namen dieser Tools verwechselt zu werden.Ich bin in das
pipenv
Kaninchenloch gegangen ( es ist in der Tat ein tiefes und dunkles Loch ... ) und da die letzte Antwort vor über 2 Jahren war , hielt ich es für nützlich, die Diskussion mit den neuesten Entwicklungen zum Thema Python Virtual Envelopes I zu aktualisieren habe gefunden.HAFTUNGSAUSSCHLUSS:
Bei dieser Antwort geht es NICHT darum, die heftige Debatte über die Vorzüge von pipenv versus venv als Umschlaglösungen fortzusetzen - ich unterstütze dies auch nicht . Es geht darum, dass PyPA widersprüchliche Standards befürwortet und wie die zukünftige Entwicklung von virtualenv verspricht, eine Entweder-Oder- Wahl überhaupt zu negieren . Ich habe mich genau deshalb auf diese beiden Werkzeuge konzentriert, weil sie von PyPA gesalbt wurden .
venv
Wie das OP feststellt, ist venv ein Tool zur Virtualisierung von Umgebungen. KEINE Lösung von Drittanbietern, sondern ein natives Tool. PyPA unterstützt venv für die Erstellung von VIRTUAL ENVELOPES : " In Version 3.5 geändert: Die Verwendung von venv wird jetzt für die Erstellung virtueller Umgebungen empfohlen ."
pipenv
pipenv kann - wie venv - zum Erstellen virtueller Umschläge verwendet werden, bietet jedoch zusätzlichFunktionenfür die Paketverwaltung und die Überprüfung von Sicherheitslücken . Anstelle der Verwendung
requirements.txt
,pipenv
liefertPaketmanagement via Pipfile . Da PyPA pipenv für PACKAGE MANAGEMENT befürwortet , scheint dies zu implizieren, dass espipfile
ersetzt wirdrequirements.txt
.JEDOCH : pipenv verwendet virtualenv als Werkzeug zum Erstellen virtueller Umschläge, NICHT venv, das von PyPA als Go-to-Tool zum Erstellen virtueller Umschläge empfohlen wird .
Widersprüchliche Standards:
Wenn es also nicht schwierig genug war, sich für eine Lösung für virtuelle Umschläge zu entscheiden, unterstützt PyPA jetzt zwei verschiedene Tools, die unterschiedliche Lösungen für virtuelle Umschläge verwenden. Die tobende Github-Debatte über venv vs virtualenv, die diesen Konflikt hervorhebt, finden Sie hier .
Konfliktlösung:
Die Github-Debatte, auf die im obigen Link verwiesen wird, hat die Entwicklung von virtualenv in Richtung der Anpassung von venv in zukünftigen Versionen gelenkt :
Fazit:
Es sieht also so aus, als ob es in Zukunft eine gewisse Konvergenz zwischen den beiden konkurrierenden Lösungen für virtuelle Hüllkurven geben wird, aber ab sofort unterscheidet sich pipenv - das verwendet
virtualenv
- erheblich vonvenv
.Angesichts der Probleme, die pipenv löst, und der Tatsache, dass PyPA seinen Segen gegeben hat, scheint es eine glänzende Zukunft zu haben. Und wenn virtualenv auf seine vorgeschlagenen Entwicklungsziele liefert, sollte nicht mehr eine virtuelle Hülle Lösung der Wahl sein , ein Fall von beiden pipenv OR Venv .
quelle
Update April 2020
Ich habe danach gesucht, als ich auf diesen Beitrag gestoßen bin . Ich denke, diese Frage, welches Tool verwendet werden soll, ist für neue Python-Benutzer wie mich ziemlich verwirrend und schwierig. Dies ist direkt von der PyPA-Website in Bezug auf pipenv:
quelle
pipenv
hat Team 2 Versionen PyPI Freigabe:2020.5.28
und in jüngerer Zeit2020.6.2
: pypi.org/project/pipenv/#history