Ich habe kürzlich gelernt, wie man virtualenv und virtualenvwrapper in meinem Workflow verwendet, aber ich habe gesehen, dass pyenv in einigen Handbüchern erwähnt wurde, aber ich kann anscheinend nicht verstehen, was pyenv ist und wie es sich von virtualenv unterscheidet / ähnelt. Ist pyenv ein besserer / neuerer Ersatz für virtualenv oder ein kostenloses Tool? Wenn letzteres der Fall ist, was macht es anders und wie arbeiten die beiden (und ggf. der virtuelle Envwrapper) zusammen?
python
virtualenv
virtualenvwrapper
pyenv
Wahrheit
quelle
quelle
pyenv
verwirrt mitpyvenv
Antworten:
Pyenv und virtualenv sind sehr unterschiedliche Tools, die auf unterschiedliche Weise unterschiedliche Aufgaben ausführen :
Pyenv ist eine Bash-Erweiterung - funktioniert unter Windows nicht -, die Ihre Aufrufe von Python, Pip usw. abfängt, um sie an eine von mehreren System-Python- Toolketten weiterzuleiten . Sie haben also immer alle Bibliotheken zur Verfügung, die Sie in der ausgewählten Python-Version installiert haben - als solche ist es gut für Benutzer, die zwischen verschiedenen Python-Versionen wechseln müssen.
VirtualEnv ist reines Python und funktioniert daher überall. Es erstellt eine Kopie von Python und Pip lokal , optional eine bestimmte Version von Python und Pip, die lokal für die Aktivierungsumgebung sind und möglicherweise Links zur aktuellen System-Toolkette enthalten, sofern dies nicht möglich ist Installieren Sie nur eine bekannte Teilmenge von Bibliotheken in dieser Umgebung. Als solches ist es mit ziemlicher Sicherheit viel besser zum Testen und Bereitstellen, da Sie genau wissen , welche Bibliotheken in welchen Versionen verwendet werden und eine globale Änderung keine Auswirkungen auf Ihr Modul hat.
venv python> 3.3
Beachten Sie, dass ab Python 3.3 eine integrierte Implementierung von VirtualEnv namens venv vorhanden ist (bei einigen Installationen ein Wrapper namens pyvenv - dieser Wrapper ist in Python 3.6 veraltet ), der wahrscheinlich bevorzugt verwendet werden sollte. Um mögliche Probleme mit dem Wrapper zu vermeiden, ist es oft eine gute Idee, ihn direkt mit zu verwenden,
/path/to/python3 -m venv desired/env/path
oder Sie können den hervorragendenpy
Python-Selektor unter Windows verwendenpy -3 -m venv desired/env/path
. Das mitdesired/env/path
configure angegebene Verzeichnis wird erstellt und entsprechend ausgefüllt. Im Allgemeinen ähnelt es der Verwendung von VirtualEnv.Zusätzliche Tools
Es gibt eine Reihe von Tools, die es wert sind, erwähnt und in Betracht gezogen zu werden, da sie bei der Verwendung eines oder mehrerer der oben genannten Tools hilfreich sein können:
quelle
venv
ist jetzt in der Standardbibliothek?virtualenv
Mit dieser Option können Sie eine benutzerdefinierte Python-Installation erstellen, z. B. in einem Unterverzeichnis Ihres Projekts. Jedes Ihrer Projekte kann somit ein eigenespython
(oder sogar mehrere) Projekt unter der jeweiligen virtuellen Umgebung haben. Es ist vollkommen in Ordnung, wenn einige / alle virtuellen Umgebungen sogar dieselbe Version vonpython
(z. B. 2.7.16) ohne Konflikte haben - sie leben getrennt und kennen sich nicht. Wenn Sie eines dieserpython
s verwenden möchten , müssen Sieactivate
es verwenden (indem Sie ein SkriptPATH
ausführen, das Ihr vorübergehend ändert, um sicherzustellen, dass dasbin/
Verzeichnis von virtualenv an erster Stelle steht). Ab diesem Zeitpunkt ruft das Aufrufenpython
(oderpip
usw.) die Version dieses virtualenv auf, bis Siedeactivate
es erreichen (wodurch das wiederhergestellt wirdPATH
).pyenv
arbeitet in einem größeren Maßstab alsvirtualenv
- es enthält ein Register von Python-Installationen (und kann zum Installieren neuer verwendet werden) und ermöglicht es Ihnen, zu konfigurieren, welche Python-Version ausgeführt werden soll, wenn Sie denpython
Befehl verwenden. Klingt ähnlich, aber die praktische Anwendung ist etwas anders. Es funktioniert, indem es sein Shim-python
SkriptPATH
(dauerhaft) vorstellt und dann entscheidet, welches "echte"python
aufgerufen werden soll. Sie können pyenv sogar so konfigurieren, dass es einen Ihrer virtuellen Python-Aufrufe aufruft (mithilfe despyenv-virtualenv
Plugins). Python-Versionen, die Sie mitpyenv
go installieren, gehen in das$(pyenv root)/versions/
Verzeichnis (standardmäßig ist pyenv root ~ / .pyenv) und daher globaler als virtualenv. Normalerweise können Sie keine über installierten Python-Versionen duplizierenpyenv
, zumindest ist dies nicht die Hauptidee.Um eine virtuelle Umgebung mit einer bestimmten Python-Version zu erstellen, müssen Sie diese Version irgendwo in Ihrem System haben (unabhängig davon, ob sie sich auf der Version befindet
PATH
oder nicht) und sie im Wesentlichen in Ihre neu erstellte virtuelle Version klonen. Eine Möglichkeit, eine bestimmte Version zu erhalten, besteht natürlich darin, sie über zu installierenpyenv
. Sobald dies erledigt ist, können einzelne virtuelle Umgebungen voneinander abweichen, indem verschiedene Module (oder Versionen davon) in ihnen installiert werden.Zusamenfassend:
virtualenv
Ermöglicht das Erstellen lokaler, unabhängiger Python-Installationen durch Klonen von vorhandenenpyenv
Mit dieser Option können Sie verschiedene Python-Versionen gleichzeitig installieren (entweder systemweit oder nur für den lokalen Benutzer) und dann auswählen, welche der zahlreichen Pythons zu einem bestimmten Zeitpunkt ausgeführt werden sollen (einschließlich der von virtualenv oder Anaconda erstellten).quelle