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;)
Antworten:
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:
Und erstellen Sie es neu mit:
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:
die du aktivierst mit:
quelle
conda create
oderconda env create
freigegeben / neu erstellt werden soll. Könnten Sie bitte näher erläutern, warum Sie die Verwendungconda env create
in dieser Situation empfehlen ?conda create
undconda env create
hier finden: groups.google.com/a/continuum.io/forum/#!topic/conda/… Das heißt, ich denke, Sie können sie normalerweise austauschbar verwenden.conda create
vsconda env create
) bevorzugt werden sollte und welche Nachteile jede hat (zB: "[conda env create
ist für] Umgebungen, in denen Pakete mit pip installiert wurden) , was zusätzliche Komplexität verursacht ": Welche zusätzliche Komplexität wird hinzugefügt?).conda env create -f environment.yml
einen Fehler verursacht, da der Name virtenv in der yml-Datei bereits verwendet wurde. Ändern Sie den Namen in Ihr neues virtenv, um zu überwinden.conda list --explicit > FILE_NAME
exportiert Binärdateien für die aktuelle Plattform und arbeitet anscheinend nicht an einer anderen.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.
quelle
Erste Konfiguration der Exportumgebung Ihrer aktuellen Conda-Umgebung mit:
Beispiel:
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:
Beispiel:
Falls das obige nicht funktioniert (aufgrund der verschiedenen Probleme von conda selbst), ist es immer einen Versuch wert, mit der folgenden Variation:
quelle
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:
Bitten Sie in der neuen virtuellen Umgebung,
pip
diese Bibliotheken mit derselben Version zu installieren: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 ).
quelle
anaconda
Tag 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, undvirtualenv
könnte Sie in Schwierigkeiten bringen. Ich vermute jedoch, dass Anaconda äquivalente Funktionen bieten sollte.Ganz am Ende dieser Dokumentationsseite :
Pakete für zukünftige Verwendung aufbewahren:
Installieren Sie Pakete aus einer Exportdatei neu:
quelle
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
quelle
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Einzeiler
conda create --clone source_env --name destination_env
quelle