Comment cloner l'environnement de travail Python sur une autre machine?

26

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;)

Hendrik
la source
Utilisez l'exportation env conda.
kbrose

Réponses:

39

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:

conda env export > environment.yml

Et recréez-le en utilisant:

conda env create -f environment.yml

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:

conda create -n yourenvname python=x.x anaconda

que vous activez en utilisant:

source activate yourenvname
gingembre
la source
La documentation Anaconda n'est pas très claire sur l'utilisation conda createou sur le conda env createpartage / recréation d'un environnement. Pourriez-vous expliquer plus en détail pourquoi vous recommandez d'utiliser conda env createdans cette situation?
Tanguy
Vous pouvez trouver quelques notes sur la différence entre conda createet conda env createici: 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.
ginge
1
J'ai vu ce fil, mais précisément j'essaie de comprendre précisément dans quelle situation chaque option ( conda createvs conda env create) doit être préférée et quels sont les inconvénients de chacun (par exemple: "[ conda env createest 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?).
Tanguy
Je veux demander que lors de l'exécution 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.
Giang Nguyễn
De cette façon, vous sauve la vie! si vous créez un environnement à partir d'un fichier basé sur les instructions de la page Gestion des environnements Anaconda, ne fonctionne pas si vous utilisez une autre plate-forme. conda list --explicit > FILE_NAMEexporte des binaires pour la plate-forme actuelle et ne fonctionne apparemment pas sur une autre.
Shayan Amani
5

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.

Pieter21
la source
5

Première configuration de l'environnement d'exportation de votre environnement conda actuel en utilisant:

conda-env  export -n your_env_name > your_env_name.yml

Exemple:

conda-env  export -n base> base.yml

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:

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

Exemple:

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

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:

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

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:

pip freeze > requirements.txt

Dans le nouveau virtualenv, demandez pipd'installer ces bibliothèques avec la même version:

pip install -r requirements.txt

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 ).

Jérôme
la source
Je n'ai pas remarqué la anacondabalise 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 et virtualenvpourrait vous causer des ennuis. Cependant, je suppose qu'anaconda devrait offrir des fonctionnalités équivalentes.
Jérôme
1

Dès la fin de cette page de documentation :

Enregistrer les packages pour une utilisation future:

conda list --export > package-list.txt

Réinstallez les packages à partir d'un fichier d'exportation:

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

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

    • À partir d'un fichier d'environnement exporté sur une autre machine:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
Shayan Amani
la source
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. dim.26
0

Bon mot

conda create --clone source_env --name destination_env

salhin
la source