Desarrollé un modelo de aprendizaje automático con Python (Anaconda + Flask) en mi estación de trabajo y todo sale bien. Más tarde, intenté enviar este programa a otra máquina donde, por supuesto, intenté configurar el mismo entorno, pero el programa no se ejecuta. Copié el programa a otras máquinas donde también funciona sin problemas.
No puedo entender cuál es el problema en el caso fallido (tanto el código del programa como el mensaje de error son abundantes, así que no puedo presentarlos aquí) pero estoy casi seguro de que es algo con las diferentes versiones de las dependencias .
Entonces, mi pregunta es que, dado un entorno en el que un cierto programa se ejecuta bien, ¿cómo puedo clonarlo en otro donde también debería funcionar bien? Por supuesto, sin la clonación del sistema completo;)

Respuestas:
En primer lugar, esta es una pregunta de Python / Anaconda y probablemente debería formularse en un subsitio de intercambio de pila diferente.
En cuanto a la pregunta en sí, puede exportar su entorno Anaconda usando:
Y recrearlo usando:
Tenga en cuenta que, como otros sugirieron, debe usar entornos virtuales que le permitan crear un entorno determinado que esté separado del de su máquina y administrarlo más fácilmente.
Para crear un entorno virtual en Anaconda puede usar:
que activa usando:
fuente
conda createoconda env createcuando comparte / recrea un entorno. ¿Podría por favor detallar más por qué recomienda usarconda env createen esta situación?conda createyconda env createaquí: groups.google.com/a/continuum.io/forum/#!topic/conda/… Dicho esto, creo que normalmente podría usarlos indistintamente.conda createvsconda env create) y cuáles son las desventajas de cada uno (por ejemplo: "[conda env createes para] entornos en los que se han instalado paquetes que utilizan pip , lo que causa complejidad adicional ": ¿qué tipo de complejidad adicional agrega?).conda env create -f environment.yml, esto causará un error porque el nombre de virtenv en el archivo yml ya se ha utilizado. Cambia el nombre a tu nueva virtud para vencer.conda list --explicit > FILE_NAMEexporta binarios para la plataforma actual y aparentemente no funciona en otra.Busque en 'contenedores', por ejemplo, Docker ( https://www.docker.com/what-container ), una alternativa más liviana a la virtualización.
Requerirá una inversión de tiempo, pero al final proporcionará muchos beneficios.
Desde el enlace, donde marqué su necesidad específica en negrita y cursiva :
Empaquete el software en unidades estandarizadas para desarrollo, envío e implementación
Una imagen de contenedor es un paquete ligero, independiente y ejecutable de un software que incluye todo lo necesario para ejecutarlo: código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema, configuraciones. Disponible para aplicaciones basadas en Linux y Windows, el software en contenedores siempre se ejecutará igual, independientemente del entorno . Los contenedores aíslan el software de su entorno, por ejemplo, las diferencias entre los entornos de desarrollo y preparación y ayudan a reducir los conflictos entre los equipos que ejecutan software diferente en la misma infraestructura.
fuente
Primero exporte la configuración del entorno de su entorno conda actual utilizando:
ejemplo:
Después de ejecutar el comando anterior, debe haber un archivo de configuración yml en su directorio actual que contenga información de su entorno conda
Para crear un nuevo entorno utilizando el archivo de configuración yml, ejecute:
ejemplo:
En caso de que el anterior no funcione (debido a los diversos problemas de conda), siempre vale la pena intentarlo con la siguiente variación:
fuente
Si su programa es principalmente Python, puede confiar únicamente en entornos virtuales.
Cree entornos virtuales para aislar sus dependencias en lugar de usar las bibliotecas del sistema. Luego use herramientas de entorno virtual para duplicar sus entornos.
En el virtualenv de trabajo, cree un archivo con la versión de cada biblioteca Python instalada:
En el nuevo virtualenv, solicite
pipinstalar esas bibliotecas con la misma versión:Esto asegura que obtenga las mismas versiones de lib en ambas máquinas. Y dado que su VCS rastrea los requisitos.txt, siempre puede recrear el entorno de una versión anterior de su código.
Por supuesto, si necesita una base de datos, un servidor web de producción, etc., terminará con algunos pasos más y no podrá confiar en virtualenv para garantizar que ambos entornos coincidan. Aquí es donde interviene Docker (ver la respuesta de Pieter21 ).
fuente
anacondaetiqueta en tu pregunta. No tengo experiencia con esto, pero ten cuidado. Creo que anaconda tiene su propia forma de gestionar entornos y usar ambos anaconda yvirtualenvpodría meterte en problemas. Sin embargo, supongo que anaconda debería ofrecer características equivalentes.Desde el final de esta página de documentación :
Guardar paquetes para uso futuro:
Reinstale paquetes desde un archivo de exportación:
fuente
Un resumen de las formas existentes para crear un entorno basado en otro:
Clonando un ambiente :
Desde un entorno existente:
$ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAMEDesde un archivo de entorno exportado en la misma máquina:
$ conda create --name ENV_NAME —-file FILE_NAME.ymlfuente
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAMEUn trazador de líneas
conda create --clone source_env --name destination_envfuente