[PYTHON] 3 Arten von Problemumgehungen zur Aktivierung des Kollisionsproblems, wenn Pyenv und Anaconda nebeneinander existieren

Dies ist eine Ergänzung zu endgültige Ausgabe der Python-Umgebungskonstruktion.

20180312 Nachtrag

Es scheint, dass "conda enable" in conda 4.4.0 übernommen wurde, das am 20.12.2017 veröffentlicht wurde. conda/CHANGELOG.md Es scheint, dass "Source Activate" im Moment nicht veraltet ist, aber "Conda Activate" wird empfohlen.

Seit Docker in letzter Zeit bekannt geworden ist (ich spüre selbst in der Windows-Umgebung keinen Stress durch Proxy), hat die Notwendigkeit, Pyenv einzufügen, abgenommen, und ich migriere auch zu Docker-Anaconda, aber als Referenz.

Kommentar. Vielen Dank.

Was ist das Problem des Aktivierungskonflikts zwischen Pyenv und Anakonda?

Unter Linux und Mac können Sie Anaconda über Pyenv installieren. Darüber hinaus denke ich, dass es Fälle gibt, in denen Sie mit Anaconda zwischen mehreren Entwicklungsumgebungen wechseln möchten. Die Umgebung in Anaconda kann als "Quellaktivierung " umgeschaltet werden. Unter pyenv tritt jedoch der folgende Fehler auf und die gesamte Shell fällt ab.

$ source activate
#>>> pyenv: -bash: command not found

Ich bin mir nicht sicher warum, aber Pyenv verwendet ein Shim-Skript, um den Pfad zu verfolgen, sodass möglicherweise etwas Seltsames passiert.

Wenn Anaconda "Conda Activate" übernommen hat ... orz

Lösung

1. Verwenden Sie kein Pyenv.

Definitive Edition führt diese Methode grundsätzlich ein. Diese Methode verwendet pyenv nur als Installationsprogramm für anaconda. Schreiben Sie nach der Installation von anaconda über pyenv den Installationspfad von anaconda in path und lassen Sie pyenv ignorieren.

$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc

--Vorteil: Die wenigsten Einstellungen und weniger zu merken.

Bei dieser Methode ist Ihnen pyenv nach dem Festlegen des Pfads überhaupt nicht bekannt.

Verwenden Sie "Source Activate" für alle Umgebungsumschaltungen.

2. Führen Sie die Aktivierung mit dem vollständigen Pfad aus.

In 1. kann pyenv local nicht verwendet werden, aber ich denke, dass dies für einige Leute fatal ist. Insbesondere für Webentwickler, die die Paketabhängigkeit für jeden PJ ändern möchten, ist es meiner Meinung nach effizienter, die Umgebung für jeden Arbeitsordner mit "pyenv local" zu wechseln. Es ist eine einfache Lösung, aber wenn Sie die Aktivierung mit dem vollständigen Pfad angeben, können Sie sie mit conda enable ausführen.

$ source $PYENV_ROOT/versions/anaconda3-2.5.0/bin/activate <Umgebungsname>

Der Nachteil kann durch Festlegen eines Alias behoben werden.

$ echo 'alias activate="source $PYENV_ROOT/versions/anaconda3-2.5.0/bin/activate"' >> ~/.bashrc
$ source ~/.bashrc

** Das? Das ist gut ?? **

Sie können "pyenv local" verwenden, um die Umgebung für jeden Arbeitsordner zu wechseln.

$ conda create -n py2 python=2.7
$ mkdir py2
$ cd py2
$ pyenv local anaconda3-2.5.0/envs/py2
$ python
#>>>Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec  6 2015, 18:08:32)
#>>>[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2

Um die Umgebung zu wechseln, verwenden Sie "enable" und "pyenv local" zusammen.

3. Fügen Sie pyenv-virtualenv ein

Dies ist die in Hinzufügung der endgültigen Ausgabe beschriebene Methode. Setzen Sie pyenv-virtualenv, ein Plug-In von pyenv, und verwenden Sie "pyenv enable".

Installation

$ git clone git://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
source ~/.bashrc

Einfach zu bedienende pyenv-virtualenv

$ conda create -n py2 python=2.7
$ mkdir py2
$ cd py2
$ pyenv activate anaconda3-2.5.0/envs/py2
$ python
#>>>Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec  6 2015, 18:08:32)
#>>>[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2

$ pyenv deactivate

Beachten Sie, dass die Shell herunterfällt, wenn Sie versehentlich "Quellaktivierung" verwenden.

Vorteile: Wahrscheinlich die richtige Verwendung. Nachteile: pyenv-virtualenv nur dafür einsetzen ...

Um die Umgebung zu wechseln, verwenden Sie "pyenv enable" und "pyenv local" zusammen.

Memo

Beide Methoden verwenden conda für die Verwaltung virtueller Umgebungen. (Verwenden Sie nicht virtualenv.) Ich denke du magst welche von 1-3 zu wählen. Früher war ich eine Sekte, aber seit kurzem bin ich zwei Sekten.

Recommended Posts

3 Arten von Problemumgehungen zur Aktivierung des Kollisionsproblems, wenn Pyenv und Anaconda nebeneinander existieren
Falsche Antwort bei Verwendung von numpy.prod () für das B-Problem von ABC169
Mechanismus von Pyenv und Virtualenv
Koexistenz von Pyenv und Autojump
Fallstricke und Problemumgehungen für pandas.DataFrame.to_sql
[Python] Fehler- und Lösungsnotiz bei Verwendung von venv mit pyenv + anaconda