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 create
oconda env create
cuando comparte / recrea un entorno. ¿Podría por favor detallar más por qué recomienda usarconda env create
en esta situación?conda create
yconda env create
aquí: groups.google.com/a/continuum.io/forum/#!topic/conda/… Dicho esto, creo que normalmente podría usarlos indistintamente.conda create
vsconda env create
) y cuáles son las desventajas de cada uno (por ejemplo: "[conda env create
es 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_NAME
exporta 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
pip
instalar 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
anaconda
etiqueta 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 yvirtualenv
podrí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_NAME
Desde un archivo de entorno exportado en la misma máquina:
$ conda create --name ENV_NAME —-file FILE_NAME.yml
fuente
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Un trazador de líneas
conda create --clone source_env --name destination_env
fuente