Archivo de entorno de exportación de Anaconda

129

¿Cómo puedo crear un archivo de entorno anaconda que pueda usarse en otras computadoras?

Exporté mi entorno anaconda python a YML usando conda env export > environment.yml. El exportado environment.ymlcontiene esta línea prefix: /home/superdev/miniconda3/envs/juicyenvque se asigna a la ubicación de mi anaconda, que será diferente en las PC de otros.

Lau
fuente
77
Solo estaba haciendo algunas pruebas, y pensé que encontré que el prefijo se ignora ... no estoy seguro de por qué está en la exportación env. Debería poder hacerlo conda env create -f environment.yml Solo como un aparte, en mi experiencia, esto no funcionará en todas las plataformas, porque conda env enumerará muchas dependencias como `vs2015_runtime` si está en Windows. Pero, por supuesto, eso no está disponible en Linux.
Alex G Rice
44
Conda realmente recomienda crear el environment.ymlarchivo a mano, para que pueda dejarlo fuera; consulte stackoverflow.com/questions/39280638/…
Brian Burns el

Respuestas:

177

No puedo encontrar nada en las condaespecificaciones que le permitan exportar un archivo de entorno sin la prefix: ...línea. Sin embargo, como Alex señaló en los comentarios, a conda no parece importarle la línea de prefijo al crear un entorno a partir de un archivo.

Con eso en mente, si desea que el otro usuario no conozca su ruta de instalación predeterminada, puede eliminar la línea de prefijo grepantes de escribir environment.yml.

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

De cualquier manera, el otro usuario ejecuta:

conda env create -f environment.yml

y el entorno se instalará en su ruta de entorno conda predeterminada.

Si desea especificar una ruta de instalación diferente a la predeterminada para su sistema (no relacionada con el 'prefijo' en environment.yml), simplemente use el -pindicador seguido de la ruta requerida.

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

Tenga en cuenta que Conda recomienda crearlo a environment.ymlmano, lo cual es especialmente importante si desea compartir su entorno entre plataformas (Windows / Linux / Mac). En este caso, puede simplemente dejar la prefixlínea.

Andrew Guy
fuente
1
... ¡huevo! 👍
Ahi Tuna
44

La forma más fácil de guardar los paquetes de un entorno para instalarlos en otra computadora es:

$ conda list -e > req.txt

entonces puedes instalar el entorno usando

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

si lo usa pip, use los siguientes comandos: referencia https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
javac
fuente
Agradable, pero no parece funcionar con paquetes instalados pip, sin embargo.
Little Bobby Tables
1
gracias acabo de actualizar en función de la referencia dada
javac
He utilizado tanto Anaconda Navigator como pip (desde dentro del entorno) para instalar cosas. ¿Qué me recomendarías usar? Ambos comandos?
DA
Creo que es mejor utilizar el comando Conda en el entorno Anaconda, también se puede utilizar PIP si es necesario
javac
9
  • Linux

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

  • Ventanas

    conda env export --no-builds | find-v "prefijo"> environment.yml


Justificación: Por defecto, conda env exportincluye la información de compilación:

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

En su lugar, puede exportar su entorno sin información de compilación:

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

Lo que desata el entorno de la versión de Python y el sistema operativo.

Ilyas
fuente
1
Estoy de acuerdo en que esta es una buena respuesta, pero considere agregar algunos detalles sobre por qué excluir la información de compilación es útil para transferir envs a través de plataformas.
merv
Terminé usando esto, pero gran idea @merv. Hice eso
François Leblanc
Desafortunadamente, esto no siempre funcionará cuando instale la exportación y la reinstalación en diferentes sistemas operativos.
Sören
2

Me parece que exportar los paquetes en formato de cadena solo es más portátil que exportar todo el condaentorno. Como la respuesta anterior ya sugirió:

$ conda list -e > requirements.txt

Sin embargo, esto requirements.txtcontiene números de compilación que no son portátiles entre sistemas operativos, por ejemplo, entre Macy Ubuntu. En conda env exporttenemos la opción --no-buildspero no con conda list -e, por lo que podemos eliminar el número de compilación emitiendo el siguiente comando:

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

Y recrear el entorno en otra computadora:

conda create -n recreated_env --file requirements.txt 
Nicole Finnie
fuente
sedEl comando funcionó bastante bien. Tuve que eliminar una versión de parche. Así major.minor.patchque major.minory funcionó. Resulta que el número de parche más bajo había sido eliminado por los repositorios principales.
Lucas
1
  1. Primero active su entorno de conda (el que desea exportar / respaldar)
conda activate myEnv
  1. Exportar todos los paquetes a un archivo (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Restaurar / importar el entorno:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
fuente