Wie ist die Beziehung zwischen virtualenv und pyenv?


175

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?


3
fgimian.github.io/blog/2014/04/20/… : Es gibt jedoch eine andere Alternative namens pyenv, die mehrere wesentliche Vorteile bietet .
Martijn Pieters

11
Sei nicht wie ich und werde pyenvverwirrt mitpyvenv
User

Antworten:


162

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/pathoder Sie können den hervorragenden pyPython-Selektor unter Windows verwenden py -3 -m venv desired/env/path. Das mit desired/env/pathconfigure 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:

  • VirtualEnvWrapper Verwalten und vereinfachen Sie die Verwendung und Verwaltung von VirtualEnv - Cross Platform .
  • pyenv-virtualenv , installiert von pyenv-installer , bietet PyEnv-Tools für die Verwaltung und Anbindung an VirtualEnv - mit dieser können Sie eine Basisinstallation erstellen, die mehr als eine Python-Version enthält, und isolierte Umgebungen in jeder von ihnen erstellen - Linux / OS- X . Vorgeschlagen von Johann Visagie
  • PyInstaller kann Ihren Python-Code, der möglicherweise unter VirtualEnv entwickelt und getestet wurde, bündeln, damit eine Plattform ausgeführt werden kann, auf der Ihre Python- Version nicht installiert ist. Beachten Sie, dass es sich nicht um einen Cross-Compiler handelt, für den Sie Windows (virtuell) benötigen -) Computer zum Erstellen von Windows-Installationen usw., aber es kann nützlich sein, auch wenn Sie sicher sein können, dass Python installiert wird, aber nicht sicher sein können, dass die Version von Python und alle Bibliotheken mit Ihrem Code kompatibel sind.

3
Erwähnenswert ist wahrscheinlich pyenv-virtualenv, ein pyenv-Plugin, mit dem pyenv und virtualenv nahtlos zusammenarbeiten können. Wenn Sie pyenv mit dem pyenv-installer installiert haben, ist pyenv-virtualenv bereits vorhanden. * github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
wjv

1
Was venvist jetzt in der Standardbibliothek?
Flimm

@Flimm: Ab Python 3.3 ist venv ein Teil der Standardbibliothek und sollte anstelle von virtualenv verwendet werden, da es häufig als "virtualenv done right" bezeichnet wird - reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv
Steve Barnes

2
pyenv-virtualenv ist nicht (oder zumindest nicht mehr) nur Linux. Es gibt ein Homebrew-Paket für eine einfache Installation unter MacOS.
Drehen Sie den

Vielen Dank, dass Sie die Interoperabilität hervorgehoben haben!
HashRocketSyntax

16

virtualenvMit dieser Option können Sie eine benutzerdefinierte Python-Installation erstellen, z. B. in einem Unterverzeichnis Ihres Projekts. Jedes Ihrer Projekte kann somit ein eigenes python(oder sogar mehrere) Projekt unter der jeweiligen virtuellen Umgebung haben. Es ist vollkommen in Ordnung, wenn einige / alle virtuellen Umgebungen sogar dieselbe Version von python(z. B. 2.7.16) ohne Konflikte haben - sie leben getrennt und kennen sich nicht. Wenn Sie eines dieser pythons verwenden möchten , müssen Sie activatees verwenden (indem Sie ein Skript PATHausführen, das Ihr vorübergehend ändert, um sicherzustellen, dass das bin/Verzeichnis von virtualenv an erster Stelle steht). Ab diesem Zeitpunkt ruft das Aufrufen python(oder pipusw.) die Version dieses virtualenv auf, bis Sie deactivatees erreichen (wodurch das wiederhergestellt wird PATH).

pyenvarbeitet in einem größeren Maßstab als virtualenv- 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 den pythonBefehl verwenden. Klingt ähnlich, aber die praktische Anwendung ist etwas anders. Es funktioniert, indem es sein Shim- pythonSkript PATH(dauerhaft) vorstellt und dann entscheidet, welches "echte" pythonaufgerufen werden soll. Sie können pyenv sogar so konfigurieren, dass es einen Ihrer virtuellen Python-Aufrufe aufruft (mithilfe des pyenv-virtualenvPlugins). Python-Versionen, die Sie mit pyenvgo 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 duplizieren pyenv, 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 PATHoder 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 installieren pyenv. 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 vorhandenen
  • pyenv 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).
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.