Was ist der Unterschied zwischen Pyenv, Virtualenv, Anaconda?

140

Ich bin ein Ruby-Programmierer, der versucht, Python zu lernen. Ich bin eine hübsche Familie mit pyenv, da es wie ein Kopieren und Einfügen von rbenv ist. Pyenv hilft dabei, mehr als eine Python-Version in einem System zu haben und die Python zu isolieren, ohne einen sensiblen Teil des Systems zu berühren.

Ich nehme an, dass jede Python-Installation mit einem Pip-Paket geliefert wird. Was ich immer noch nicht verstehe ist, dass es viele gute Python-Bibliotheken gibt, die vorschlagen, diese virtuelle Umgebung und Anakonda zu verwenden. Ich kann sogar ein virtualenv Plugin für pyenv finden.

Jetzt bin ich verwirrt mit dem Zweck dieser beiden pyenv und virtualenv. schlimmer in pyenv gibt es ein virtualenv plugin.

Meine Fragen sind:

  • Was ist der Unterschied zwischen pyenv und virtualenv?
  • Gibt es einen Unterschied bei der Verwendung des Befehls pip sowohl in pyenv als auch in virtualenv?
  • Was macht dieser Pyenv Virutalenv?

Ihre Erklärung mit Beispiel wird sehr geschätzt.

channa ly
quelle

Antworten:

151

Bearbeiten: Es ist auch hier erwähnenswert pip, condaund es pipgibt Ähnlichkeiten und Unterschiede, die für dieses Thema relevant sind .

pip: der Python Package Manager.

  • Sie können sich pipdas Python-Äquivalent des Ruby- gemBefehls vorstellen
  • pip ist standardmäßig nicht in Python enthalten.
  • Sie können Python mit Homebrew installieren, wodurch pip automatisch installiert wird:brew install python
  • Die endgültige Version von OSX enthielt standardmäßig kein pip. Sie können pip zur Python-Version Ihres Mac-Systems hinzufügensudo easy_install pip
  • Sie können Python-Pakete mit PyPI: The Python Package Index finden und veröffentlichen
  • Die Datei require.txt ist vergleichbar mit dem Ruby gemfile
  • Um eine Anforderungs-Textdatei zu erstellen, pip freeze > requirements.txt
  • Beachten Sie, dass zu diesem Zeitpunkt Python auf unserem System installiert ist und wir eine Datei require.txt erstellt haben, in der alle Python-Pakete aufgeführt sind, die auf Ihrem System installiert wurden.

pyenv: Python-Versionsmanager

  • Aus den Dokumenten : Mit pyenv können Sie problemlos zwischen mehreren Python-Versionen wechseln. Es ist einfach, unauffällig und folgt der UNIX-Tradition von Einzweckwerkzeugen, die eines gut können. Dieses Projekt wurde aus rbenv und ruby-build gegabelt und für Python modifiziert.
  • Viele Leute zögern, Python3 zu verwenden .
  • Wenn Sie verschiedene Versionen von Python verwenden müssen, pyenvkönnen Sie dies einfach verwalten.

virtualenv: Python Environment Manager.

  • Aus den Dokumenten : Das grundlegende Problem, das angesprochen wird, sind Abhängigkeiten und Versionen sowie indirekte Berechtigungen. Stellen Sie sich vor, Sie haben eine Anwendung, die Version 1 von LibFoo benötigt, für eine andere Anwendung jedoch Version 2. Wie können Sie beide Anwendungen verwenden? Wenn Sie alles in /usr/lib/python2.7/site-packages installieren (oder wie auch immer der Standardspeicherort Ihrer Plattform lautet), kann es leicht zu einer Situation kommen, in der Sie unbeabsichtigt eine Anwendung aktualisieren, die nicht aktualisiert werden sollte.
  • Um eine zu erstellen virtualenv, einfach aufrufen virtualenv ENV, wo ENVist ein Verzeichnis ist die neue virtuelle Umgebung zu platzieren.
  • Um das zu initialisieren virtualenv, müssen Sie source ENV/bin/activate. Um die Verwendung zu beenden, rufen Sie einfach an deactivate.
  • Sobald Sie das aktiviert haben virtualenv, können Sie alle Paketanforderungen eines Arbeitsbereichs installieren, indem Sie es für pip install -rdie Projektdatei requirements.txtausführen.

Anaconda: Paketmanager + Umweltmanager + Zusätzliche wissenschaftliche Bibliotheken.

  • Aus den Dokumenten : Anaconda 4.2.0 enthält eine einfache Installation von Python (2.7.12, 3.4.5 und / oder 3.5.2) und Updates von über 100 vorgefertigten und getesteten wissenschaftlichen und analytischen Python-Paketen, einschließlich NumPy, Pandas , SciPy, Matplotlib und IPython mit über 620 weiteren Paketen, die über eine einfache Version verfügbar sindconda install <packagename>
  • Als Webentwickler habe ich Anaconda nicht verwendet. Es ist ~ 3 GB einschließlich aller Pakete.
  • Es gibt eine abgespeckte minicondaVersion, die eine einfachere Option zu sein scheint als die Verwendung von pip+ virtualenv, obwohl ich keine Erfahrung mit der persönlichen Verwendung habe.
  • Während condaSie Pakete installieren können, sind diese Pakete getrennt als PyPI Pakete, so dass Sie noch zusätzlich zu Verwendung pip müssen in Abhängigkeit von den Arten von Paketen müssen Sie installieren.

Siehe auch:

Wade Williams
quelle
3
Dies könnte jetzt wahrscheinlich eine Aktualisierung gebrauchen, siehe stackoverflow.com/a/49084152/14420
matt wilkie
9
Könnte dies aktualisiert werden, um in pipenv aufgenommen zu werden, da es derzeit das offiziell empfohlene Python-Verpackungstool von Python.org zu sein scheint?
Wavesailor
1
Was ist das Problem bei der Installation von Bibliotheken im Wert von nur 3 GB? Sie möchten nicht alle diese Bibliotheken bereitstellen, aber nur weil Sie Bibliotheken im Wert von 3 GB installiert haben, müssen Sie nicht alle Bibliotheken bereitstellen. Und das ist heutzutage eine winzige Menge an Festplattenspeicher. Ich verwende derzeit eine Anaconda-Installation und verwalte meine Umgebungen mit venv, aber ich habe überlegt, ob ich conda auch für meine virtuellen Umgebungen verwenden soll (ich glaube nicht, dass ich das werde - venv scheint mir ein reibungsloser Workflow zu sein).
David
@ David Ich bin etwas spät dran, aber können Sie venv erweitern, scheint mir ein reibungsloser Workflow zu sein ?
AMC
1

Einfache Analogie:

  • pyenv ~ rbenv
  • pip ~ bundler
  • virtuelle Umgebung in rvm. Dies kann vom Bundler direkt ohne Gemset verwaltet werden.

Da ich Python3 verwende, bevorzuge ich die in Python3 integrierte virtuelle Umgebung namens venv . venv ist einfach und leicht zu bedienen. Ich würde Ihnen empfehlen, die offiziellen Dokumente zu lesen. Das Dokument ist kurz und prägnant.

In Ruby brauchen wir keine virtuelle Umgebung, weil der Bundler sich darum kümmert. Sowohl Virtual Env als auch Bundler sind großartig, aber sie haben unterschiedliche Konzepte, aber sie versuchen, dasselbe Problem zu lösen.

channa ly
quelle