Wie klone ich eine Python-Arbeitsumgebung auf einem anderen Computer?

26

Ich habe mit Python (Anaconda + Flask) auf meiner Workstation ein Modell für maschinelles Lernen entwickelt, und alles läuft gut. Später habe ich versucht, dieses Programm auf einen anderen Computer zu übertragen, wobei ich natürlich versucht habe, dieselbe Umgebung einzurichten, das Programm jedoch nicht ausgeführt werden kann. Ich habe das Programm auf andere Rechner kopiert, auf denen es auch reibungslos läuft.

Ich kann nicht herausfinden, was das Problem in dem fehlgeschlagenen Fall ist (sowohl der Programmcode als auch die Fehlermeldung sind reichlich vorhanden, so dass ich sie hier nicht darstellen kann), aber ich bin fast sicher, dass es sich um etwas mit den verschiedenen Versionen der Abhängigkeiten handelt .

Meine Frage ist also, dass in einer Umgebung, in der ein bestimmtes Programm gut läuft, wie kann ich es auf ein anderes klonen, in dem es auch gut laufen sollte? Natürlich ohne das Klonen des gesamten Systems;)

Hendrik
quelle
Verwenden Sie conda env export.
Kbrose

Antworten:

38

Zuallererst ist dies eine Python / Anaconda-Frage und sollte wahrscheinlich auf einer anderen Stack-Exchange-Subsite gestellt werden.


Was die Frage selbst betrifft, können Sie Ihre Anaconda-Umgebung exportieren, indem Sie Folgendes verwenden:

conda env export > environment.yml

Und erstellen Sie es neu mit:

conda env create -f environment.yml

Beachten Sie, dass Sie, wie von anderen empfohlen, virtuelle Umgebungen verwenden sollten, mit denen Sie eine bestimmte, von der Umgebung Ihres Computers getrennte Umgebung erstellen und einfacher verwalten können.

Um eine virtuelle Umgebung in Anaconda zu erstellen, können Sie Folgendes verwenden:

conda create -n yourenvname python=x.x anaconda

die du aktivierst mit:

source activate yourenvname
ginge
quelle
In der Anaconda-Dokumentation ist nicht klar, ob eine Umgebung verwendet conda createoder conda env createfreigegeben / neu erstellt werden soll. Könnten Sie bitte näher erläutern, warum Sie die Verwendung conda env createin dieser Situation empfehlen ?
Tanguy
Sie können einige Hinweise zum Unterschied zwischen conda createund conda env createhier finden: groups.google.com/a/continuum.io/forum/#!topic/conda/… Das heißt, ich denke, Sie können sie normalerweise austauschbar verwenden.
Ginge
1
Ich habe diesen Thread gesehen, aber genau ich versuche zu verstehen, in welcher Situation jede Option ( conda createvs conda env create) bevorzugt werden sollte und welche Nachteile jede hat (zB: "[ conda env createist für] Umgebungen, in denen Pakete mit pip installiert wurden) , was zusätzliche Komplexität verursacht ": Welche zusätzliche Komplexität wird hinzugefügt?).
Tanguy
Ich möchte Sie bitten, dass dies beim Ausführen conda env create -f environment.ymleinen Fehler verursacht, da der Name virtenv in der yml-Datei bereits verwendet wurde. Ändern Sie den Namen in Ihr neues virtenv, um zu überwinden.
Giang Nguyễn
Auf diese Weise rettet Ihr Leben! Wenn Sie eine Umgebung aus einer Datei basierend auf den Anweisungen auf der Seite "Anaconda Managing Environments" erstellen, funktioniert dies nicht, wenn Sie eine andere Plattform verwenden. conda list --explicit > FILE_NAMEexportiert Binärdateien für die aktuelle Plattform und arbeitet anscheinend nicht an einer anderen.
Shayan Amani
5

Schauen Sie sich 'Container' an, z. B. Docker ( https://www.docker.com/what-container ), eine leichtgewichtigere Alternative zur Virtualisierung.

Es wird einige Zeit dauern, aber am Ende wird es viele Vorteile bringen.

Über den Link, unter dem ich Ihre spezifischen Anforderungen kursiv hervorgehoben habe :

Paketsoftware in standardisierten Einheiten für Entwicklung, Versand und Bereitstellung

Ein Container-Image ist ein kompaktes, eigenständiges, ausführbares Paket einer Software, das alles enthält, was zum Ausführen erforderlich ist: Code, Laufzeit, Systemtools, Systembibliotheken und Einstellungen. Container-Software, die sowohl für Linux- als auch für Windows-basierte Apps verfügbar ist , wird unabhängig von der Umgebung immer gleich ausgeführt . Container isolieren Software von der Umgebung, z. B. Unterschiede zwischen Entwicklungs- und Staging-Umgebungen, und reduzieren Konflikte zwischen Teams, die unterschiedliche Software auf derselben Infrastruktur ausführen.

Pieter21
quelle
5

Erste Konfiguration der Exportumgebung Ihrer aktuellen Conda-Umgebung mit:

conda-env  export -n your_env_name > your_env_name.yml

Beispiel:

conda-env  export -n base> base.yml

Nachdem Sie den obigen Befehl ausgeführt haben, sollte sich eine yml-Konfigurationsdatei in Ihrem aktuellen Verzeichnis befinden, die Informationen zu Ihrer Conda-Umgebung enthält

So erstellen Sie eine neue Umgebung mit der Konfigurationsdatei yml:

conda-env create -n new_env -f=\path\to\base.yml 

Beispiel:

conda-env create -n venv -f=base.yml

Falls das obige nicht funktioniert (aufgrund der verschiedenen Probleme von conda selbst), ist es immer einen Versuch wert, mit der folgenden Variation:

conda-env create --name new_env --file \path\to\base.yml 
Muhammad Umar Amanat
quelle
4

Wenn Ihr Programm hauptsächlich aus Python besteht, können Sie sich ausschließlich auf virtuelle Umgebungen verlassen.

Erstellen Sie virtuelle Umgebungen, um Ihre Abhängigkeiten zu isolieren, anstatt die Systembibliotheken zu verwenden. Verwenden Sie dann Tools für virtuelle Umgebungen, um Ihre Umgebungen zu duplizieren.

Erstellen Sie in der Arbeitsumgebung virtualenv eine Datei mit der Version jeder installierten Python-Bibliothek:

pip freeze > requirements.txt

Bitten Sie in der neuen virtuellen Umgebung, pipdiese Bibliotheken mit derselben Version zu installieren:

pip install -r requirements.txt

Dies stellt sicher, dass Sie auf beiden Rechnern die gleiche lib-Version erhalten. Und da die Datei requirements.txt von Ihrem VCS verfolgt wird, können Sie jederzeit die Umgebung einer alten Version Ihres Codes neu erstellen.

Wenn Sie eine Datenbank, einen Produktions-Webserver usw. benötigen, müssen Sie natürlich noch ein paar Schritte ausführen und können sich nicht auf virtualenv verlassen, um sicherzustellen, dass beide Umgebungen übereinstimmen. Hier greift Docker ein (siehe Antwort von Pieter21 ).

Jérôme
quelle
Ich habe den anacondaTag auf Ihrer Frage nicht bemerkt . Ich habe damit keine Erfahrung, aber sei vorsichtig. Ich denke, Anaconda hat seine eigene Art, Umgebungen zu verändern und beide Anaconda zu verwenden, und virtualenvkönnte Sie in Schwierigkeiten bringen. Ich vermute jedoch, dass Anaconda äquivalente Funktionen bieten sollte.
Jérôme
1

Ganz am Ende dieser Dokumentationsseite :

Pakete für zukünftige Verwendung aufbewahren:

conda list --export > package-list.txt

Installieren Sie Pakete aus einer Exportdatei neu:

conda create -n myenv --file package-list.txt
Miladiouss
quelle
1

Eine Zusammenfassung der vorhandenen Möglichkeiten zum Erstellen einer Umgebung, die auf einer anderen basiert:

  • Klonen einer Umgebung :

    • Aus einer vorhandenen Umgebung:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • Aus einer exportierten Umgebungsdatei auf demselben Computer:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • Aus einer exportierten Umgebungsdatei auf einem anderen Computer:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
Shayan Amani
quelle
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. So
0

Einzeiler

conda create --clone source_env --name destination_env

salhin
quelle