Cómo actualizar un entorno Conda existente con un archivo .yml

Resuelto asked hace 7 años • 4 respuestas

¿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.ymlarchivo 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.ymlarchivo 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?

 avatar Feb 21 '17 02:02
Aceptado

Intente usar la actualización de conda env :

conda activate myenv
conda env update --file local.yml --prune

--prunedesinstala las dependencias que se eliminaron local.yml, como se señala en esta respuesta de @Blink.

Atención: si hay una nameetiqueta 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.

alkamid avatar May 09 '2017 15:05 alkamid

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
Blink avatar Feb 22 '2019 10:02 Blink

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!
Dave avatar Sep 08 '2017 10:09 Dave

Recientemente, Conda introdujo la opción de apilar entornos , lo que debería resolver este problema.

seali33 avatar Jul 12 '2023 15:07 seali33