J'ai développé un modèle d'apprentissage automatique avec Python (Anaconda + Flask) sur mon poste de travail et tout se passe bien. Plus tard, j'ai essayé d'envoyer ce programme sur une autre machine où j'ai bien sûr essayé de configurer le même environnement, mais le programme ne fonctionne pas. J'ai copié le programme sur d'autres machines où il fonctionne également correctement.
Je ne peux pas comprendre quel est le problème dans le cas d'échec (le code du programme et le message d'erreur sont copieux, donc je ne peux pas les présenter ici) mais je suis presque certain que c'est quelque chose avec les différentes versions des dépendances .
Donc, ma question est que, étant donné un environnement où un certain programme fonctionne bien, comment puis-je le cloner dans un autre où il devrait également bien fonctionner? Bien sûr, sans le clonage du système complet;)
Réponses:
Tout d'abord, c'est une question Python / Anaconda et devrait probablement être posée dans un sous-site d'échange de pile différent.
Quant à la question elle-même - vous pouvez exporter votre environnement Anaconda en utilisant:
Et recréez-le en utilisant:
Veuillez noter que, comme d'autres l'ont suggéré - vous devez utiliser des environnements virtuels qui vous permettent de créer un certain environnement séparé de celui de votre machine et de le gérer plus facilement.
Pour créer un environnement virtuel dans Anaconda, vous pouvez utiliser:
que vous activez en utilisant:
la source
conda create
ou sur leconda env create
partage / recréation d'un environnement. Pourriez-vous expliquer plus en détail pourquoi vous recommandez d'utiliserconda env create
dans cette situation?conda create
etconda env create
ici: groups.google.com/a/continuum.io/forum/#!topic/conda/… Cela dit, je pense que vous pouvez généralement les utiliser de manière interchangeable.conda create
vsconda env create
) doit être préférée et quels sont les inconvénients de chacun (par exemple: "[conda env create
est pour] les environnements dans lesquels des packages utilisant pip ont été installés dans , ce qui entraîne une complexité supplémentaire ": quel type de complexité supplémentaire ajoute-t-il?).conda env create -f environment.yml
, cela provoquera une erreur car le nom de virtenv dans le fichier yml a déjà été utilisé. Changez le nom de votre nouveau virtenv à surmonter.conda list --explicit > FILE_NAME
exporte des binaires pour la plate-forme actuelle et ne fonctionne apparemment pas sur une autre.Regardez dans les «conteneurs», par exemple Docker ( https://www.docker.com/what-container ), une alternative plus légère à la virtualisation.
Cela nécessitera un certain investissement de temps, mais en fin de compte fournira de nombreux avantages.
Du lien, où j'ai marqué votre besoin spécifique en italique gras :
Conditionner le logiciel en unités standardisées pour le développement, l'expédition et le déploiement
Une image de conteneur est un package exécutable léger et autonome d'un logiciel qui comprend tout le nécessaire pour l'exécuter: code, runtime, outils système, bibliothèques système, paramètres. Disponible pour les applications basées sur Linux et Windows, les logiciels conteneurisés fonctionneront toujours de la même manière, quel que soit l'environnement . Les conteneurs isolent les logiciels de leur environnement, par exemple les différences entre les environnements de développement et de transfert et aident à réduire les conflits entre les équipes exécutant différents logiciels sur la même infrastructure.
la source
Première configuration de l'environnement d'exportation de votre environnement conda actuel en utilisant:
Exemple:
Après avoir exécuté la commande ci-dessus, leur fichier de configuration devrait être yml dans votre répertoire actuel qui contient des informations sur votre environnement conda
Pour créer un nouvel environnement à l'aide du fichier de configuration yml, exécutez:
Exemple:
Dans le cas où celui-ci ne fonctionne pas (en raison des divers problèmes de conda lui-même), cela vaut toujours la peine d'essayer avec la variation suivante:
la source
Si votre programme est principalement Python, vous pouvez compter uniquement sur des environnements virtuels.
Créez des environnements virtuels pour isoler vos dépendances plutôt que d'utiliser les bibliothèques système. Utilisez ensuite des outils d'environnement virtuel pour dupliquer vos environnements.
Dans le virtualenv de travail, créez un fichier avec la version de chaque bibliothèque Python installée:
Dans le nouveau virtualenv, demandez
pip
d'installer ces bibliothèques avec la même version:Cela garantit que vous obtenez les mêmes versions de lib sur les deux machines. Et comme requirements.txt est suivi par votre VCS, vous pouvez toujours recréer l'environnement d'une ancienne version de votre code.
Bien sûr, si vous avez besoin d'une base de données, d'un serveur Web de production, etc., vous vous retrouvez avec quelques étapes supplémentaires et vous ne pouvez pas compter sur virtualenv pour vous assurer que les deux environnements correspondent. C'est là que Docker intervient (voir la réponse de Pieter21 ).
la source
anaconda
balise sur votre question. Je n'ai pas d'expérience avec cela, mais soyez prudent. Je pense qu'anaconda a sa propre façon de gérer les environnements et d'utiliser à la fois anaconda etvirtualenv
pourrait vous causer des ennuis. Cependant, je suppose qu'anaconda devrait offrir des fonctionnalités équivalentes.Dès la fin de cette page de documentation :
Enregistrer les packages pour une utilisation future:
Réinstallez les packages à partir d'un fichier d'exportation:
la source
Un résumé des façons existantes de créer un environnement basé sur un autre:
Clonage d'un environnement :
Depuis un environnement existant:
$ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME
À partir d'un fichier d'environnement exporté sur la même machine:
$ conda create --name ENV_NAME —-file FILE_NAME.yml
la source
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Bon mot
conda create --clone source_env --name destination_env
la source