Cómo actualizar un entorno Conda existente con un archivo .yml
¿Cómo se puede actualizar un entorno conda preexistente con otro archivo .yml? Esto es extremadamente útil cuando se trabaja en proyectos que tienen múltiples archivos de requisitos, es decir base.yml, local.yml, production.yml
, etc.
Por ejemplo, a continuación se muestra un base.yml
archivo que tiene los paquetes conda-forge, conda y pip:
base.yml
name: myenv
channels:
- conda-forge
dependencies:
- django=1.10.5
- pip:
- django-crispy-forms==1.6.1
El entorno real se crea con:
conda env create -f base.yml
.
Más adelante, será necesario agregar paquetes adicionales a base.yml
. Otro archivo, digamos local.yml
, necesita importar esas actualizaciones.
Los intentos anteriores de lograr esto incluyen:
creando un local.yml
archivo con una definición de importación:
channels:
dependencies:
- pip:
- boto3==1.4.4
imports:
- requirements/base.
Y luego ejecute el comando:
conda install -f local.yml
.
Esto no funciona. ¿Alguna idea?
Intente usar la actualización de conda env :
conda activate myenv
conda env update --file local.yml --prune
--prune
desinstala las dependencias que se eliminaron local.yml
, como se señala en esta respuesta de @Blink.
Atención: si hay una name
etiqueta con un nombre distinto al de su entorno en local.yml
, el comando anterior creará un nuevo entorno con ese nombre. Para evitar esto, use (gracias @NumesSanguis):
conda env update --name myenv --file local.yml --prune
Consulte Actualización de un entorno en la Guía del usuario de Conda.
La respuesta sugerida es parcialmente correcta. Deberá agregar la opción --prune para desinstalar también los paquetes que se eliminaron del entorno.yml. Comando correcto:
conda env update -f local.yml --prune
La respuesta de alkamid está en la línea correcta, pero descubrí que Conda no puede instalar nuevas dependencias si el entorno ya está activo. Desactivar el entorno primero resuelve esto:
source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!
Recientemente, Conda introdujo la opción de apilar entornos , lo que debería resolver este problema.