Fichier d'environnement d'exportation Anaconda

129

Comment puis-je créer un fichier d'environnement anaconda qui pourrait être utilisé sur d'autres ordinateurs?

J'ai exporté mon environnement python anaconda vers YML en utilisant conda env export > environment.yml. L'exporté environment.ymlcontient cette ligne prefix: /home/superdev/miniconda3/envs/juicyenvqui correspond à l'emplacement de mon anaconda qui sera différent sur les autres ordinateurs.

Lau
la source
7
Je faisais juste des tests et j'ai pensé que le préfixe était ignoré ... je ne sais pas pourquoi il se trouve dans l'exportation env. Vous devriez être en mesure de le faire. conda env create -f environment.yml En passant, d'après mon expérience, cela ne fonctionnera pas sur toutes les plates-formes, car conda env listera de nombreuses dépendances telles que `vs2015_runtime` si vous êtes sous Windows. Mais bien sûr, ce n'est pas disponible sur Linux.
Alex G Rice
4
Conda recommande en fait de créer le environment.ymlfichier à la main, vous pouvez donc le laisser de côté - voir stackoverflow.com/questions/39280638/…
Brian Burns

Réponses:

178

Je ne trouve rien dans les condaspécifications qui vous permette d'exporter un fichier d'environnement sans la prefix: ...ligne. Cependant, comme Alex l'a souligné dans les commentaires, conda ne semble pas se soucier de la ligne de préfixe lors de la création d'un environnement à partir d'un fichier.

Dans cet esprit, si vous souhaitez que l'autre utilisateur n'ait aucune connaissance de votre chemin d'installation par défaut, vous pouvez supprimer la ligne de préfixe avec grepavant d'écrire dans environment.yml.

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

Dans tous les cas, l'autre utilisateur exécute alors:

conda env create -f environment.yml

et l'environnement sera installé dans leur chemin d'environnement conda par défaut.

Si vous souhaitez spécifier un chemin d'installation différent de celui par défaut pour votre système (non lié au 'préfixe' dans l'environnement.yml), utilisez simplement l' -pindicateur suivi du chemin requis.

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

Notez que Conda recommande de créer le environment.ymlà la main, ce qui est particulièrement important si vous souhaitez partager votre environnement sur plusieurs plates-formes (Windows / Linux / Mac). Dans ce cas, vous pouvez simplement omettre la prefixligne.

Andrew Guy
la source
1
... excellent! 👍
Ahi Tuna le
44

Le moyen le plus simple d'enregistrer les packages d'un environnement à installer sur un autre ordinateur est:

$ conda list -e > req.txt

alors vous pouvez installer l'environnement en utilisant

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

si vous utilisez pip, veuillez utiliser les commandes suivantes: référence https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
Javac
la source
Bien, mais cela ne semble pas fonctionner avec les packages installés par pip.
Little Bobby Tables
1
merci je viens de mettre à jour en fonction de la référence donnée
javac
J'ai utilisé à la fois Anaconda Navigator et pip (depuis l'environnement) pour installer des choses. Que recommanderiez-vous que j'utilise? Les deux commandes?
DA
Je pense qu'il est préférable d'utiliser la commande conda dans l'environnement Anaconda, vous pouvez également utiliser pip si nécessaire
javac
9
  • Linux

    conda env export --no-builds | grep -v "prefix"> environment.yml

  • les fenêtres

    conda env export --no-builds | findstr -v "prefix"> environment.yml


Justification: Par défaut, conda env exportinclut les informations de construction:

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

Vous pouvez à la place exporter votre environnement sans informations de build:

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

Ce qui délie l'environnement de la version Python et du système d'exploitation.

Ilyas
la source
1
Je conviens que c'est une bonne réponse, mais pensez à ajouter quelques détails sur les raisons pour lesquelles l'exclusion des informations de construction est utile pour transférer des envs entre plates-formes.
merv
J'ai fini par utiliser ça, mais une excellente idée @merv. Fait juste ça.
François Leblanc le
Malheureusement, cela ne fonctionnera pas toujours lors de l'installation de l'exportation et de la réinstallation sur un système d'exploitation différent.
Sören le
2

Je trouve qu'exporter les paquets uniquement au format chaîne est plus portable que d'exporter tout l' condaenvironnement. Comme la réponse précédente l'a déjà suggéré:

$ conda list -e > requirements.txt

Cependant, il requirements.txtcontient des numéros de build qui ne sont pas portables entre les systèmes d'exploitation, par exemple entre Macet Ubuntu. Dans conda env exportnous avons l'option --no-buildsmais pas avec conda list -e, donc nous pouvons supprimer le numéro de build en émettant la commande suivante:

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

Et recréez l'environnement sur un autre ordinateur:

conda create -n recreated_env --file requirements.txt 
Nicole Finnie
la source
sedla commande fonctionnait plutôt bien. J'ai dû supprimer une version de patch. Donc , major.minor.patchpour major.minoret cela a fonctionné. Il s'avère que le numéro de patch le plus bas avait été supprimé par les dépôts principaux.
Lucas
1
  1. Commencez par activer votre environnement conda (celui que vous souhaitez exporter / sauvegarder)
conda activate myEnv
  1. Exporter tous les packages dans un fichier (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Restaurer / importer l'environnement:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
la source