Anaconda Export Umgebungsdatei

129

Wie kann ich eine Anaconda-Umgebungsdatei erstellen, die auf anderen Computern verwendet werden kann?

Ich habe meine Anaconda-Python-Umgebung mit nach YML exportiert conda env export > environment.yml. Die exportierte environment.ymlenthält diese Zeile, prefix: /home/superdev/miniconda3/envs/juicyenvdie dem Standort meiner Anakonda zugeordnet ist, der sich auf den PCs anderer unterscheidet.

Lau
quelle
7
Ich habe nur ein paar Tests durchgeführt und dachte, ich habe festgestellt, dass das Präfix ignoriert wird ... ich bin mir nicht sicher, warum es im env-Export enthalten ist. conda env create -f environment.yml Abgesehen davon sollten Sie in der Lage sein, dies zu tun. Meiner Erfahrung nach wird dies nicht plattformübergreifend funktionieren, da conda env unter Windows viele Abhängigkeiten wie "vs2015_runtime" auflistet. Aber das ist natürlich nicht unter Linux verfügbar.
Alex G Rice
4
Conda empfiehlt tatsächlich, die environment.ymlDatei von Hand zu erstellen , damit Sie sie weglassen können
Brian Burns,

Antworten:

177

Ich kann in den condaSpezifikationen nichts finden, was es Ihnen ermöglicht, eine Umgebungsdatei ohne die prefix: ...Zeile zu exportieren . Wie Alex in den Kommentaren betonte, scheint sich conda beim Erstellen einer Umgebung aus einer Datei nicht um die Präfixzeile zu kümmern.

Mit dem im Verstand, wenn Sie die anderen Benutzer wollen Pfad keine Kenntnis von Ihrem Standard haben , installieren Sie das Präfix entsprechend entfernen können grepvor dem Schreiben zu environment.yml.

conda env export | grep -v "^prefix: " > environment.yml

In beiden Fällen führt der andere Benutzer dann Folgendes aus:

conda env create -f environment.yml

und die Umgebung wird in ihrem Standardpfad für die Conda-Umgebung installiert.

Wenn Sie einen anderen Installationspfad als den Standardpfad für Ihr System angeben möchten (nicht in Bezug auf 'Präfix' in der Datei environment.yml), verwenden Sie einfach das -pFlag gefolgt vom erforderlichen Pfad.

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

Beachten Sie, dass Conda empfiehlt, das environment.ymlvon Hand zu erstellen. Dies ist besonders wichtig, wenn Sie Ihre Umgebung plattformübergreifend (Windows / Linux / Mac) freigeben möchten. In diesem Fall können Sie die prefixZeile einfach weglassen .

Andrew Guy
quelle
1
... eiförmig! 👍
Ahi Thunfisch
44

Der einfachste Weg, um die Pakete aus einer Umgebung zu speichern, die auf einem anderen Computer installiert werden soll, ist:

$ conda list -e > req.txt

dann können Sie die Umgebung mit installieren

$ conda create -n new environment --file req.txt

Wenn Sie verwenden pip, verwenden Sie bitte die folgenden Befehle: Referenz https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
Javac
quelle
Schön, aber es scheint nicht mit Pip-installierten Paketen zu funktionieren.
Little Bobby Tables
1
danke ich habe gerade basierend auf der gegebenen Referenz aktualisiert
javac
Ich habe sowohl Anaconda Navigator als auch pip (aus der Umgebung heraus) verwendet, um Dinge zu installieren. Was würdest du mir empfehlen? Beide Befehle?
DA
Ich denke, es ist besser, den Befehl conda in einer Anaconda-Umgebung zu verwenden. Sie können auch pip verwenden, wenn dies erforderlich ist
javac
9
  • Linux

    conda env export --no-Builds | grep -v "Präfix"> environment.yml

  • Windows

    conda env export --no-Builds | findstr -v "Präfix"> environment.yml


Begründung: conda env exportEnthält standardmäßig die Build-Informationen:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

Sie können stattdessen Ihre Umgebung ohne Build-Informationen exportieren:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

Dadurch wird die Umgebung von der Python-Version und dem Betriebssystem getrennt.

Ilyas
quelle
1
Ich bin damit einverstanden, dass dies eine gute Antwort ist, aber erwägen Sie, einige Details hinzuzufügen, warum das Ausschließen von Build-Informationen für die plattformübergreifende Übertragung von Envs nützlich ist.
Merv
Endete damit, aber tolle Idee @merv. Hab genau das getan.
François Leblanc
Leider funktioniert dies nicht immer, wenn Sie den Export und die Neuinstallation auf einem anderen Betriebssystem installieren.
Sören
2

Ich finde, dass das Exportieren der Pakete nur im String-Format portabler ist als das Exportieren der gesamten condaUmgebung. Wie die vorherige Antwort bereits angedeutet hat:

$ conda list -e > requirements.txt

Dies requirements.txtenthält jedoch Build-Nummern, die nicht zwischen Betriebssystemen portierbar sind, z . B. zwischen Macund Ubuntu. In haben conda env exportwir die Option, --no-buildsaber nicht mit conda list -e, so dass wir die Build-Nummer entfernen können, indem wir den folgenden Befehl ausgeben:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

Und erstellen Sie die Umgebung auf einem anderen Computer neu:

conda create -n recreated_env --file requirements.txt 
Nicole Finnie
quelle
sedBefehl funktionierte ziemlich gut. Ich musste eine Patch-Version löschen. Also major.minor.patchzu major.minorund es hat funktioniert. Es stellte sich heraus, dass die niedrigere Patch-Nummer von den Haupt-Repos gelöscht wurde.
Lucas
1
  1. Aktivieren Sie zuerst Ihre Conda-Umgebung (die, die Sie exportieren / sichern möchten).
conda activate myEnv
  1. Exportieren Sie alle Pakete in eine Datei (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Umgebung wiederherstellen / importieren:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
quelle