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


138

¿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 con 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 actual se crea con: conda env create -f base.yml.

Más adelante, se deben agregar paquetes adicionales base.yml. Otro archivo, por ejemplo local.yml, necesita importar esas actualizaciones.

Los intentos anteriores para lograr esto incluyen:

crear un local.ymlarchivo con una definición de importación:

channels:

dependencies:
  - pip:
    - boto3==1.4.4
imports:
  - requirements/base. 

Y a continuación, ejecute el comando: conda install -f local.yml.

Esto no funciona. ¿Alguna idea?


¿Es posible actualizar el entorno actualmente activado? Acabo de intentar esto, pero la actualización fue al entorno nombrado en el archivo yml.
Sören

Respuestas:


202

Intente usar la actualización de conda env :

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

O sin la necesidad de activar el entorno (gracias @NumesSanguis):

conda env update --name myenv --file local.yml

12
No necesita el signo igual entre -fy file.yml. Eliminar el signo igual hará que la finalización de la pestaña funcione en el .ymlnombre del archivo.
BallpointBen

44
Agregar --name env_namepara ignorar cualquier name: fooetiqueta local.yml. También evita la necesidad de activar myenv primero. Comando completo: conda env update --name env_name --file local.yml De: stackoverflow.com/a/45525593/3399066 comentario de
NumesSanguis

1
En la versión más reciente de conda creo que usamos "conda enable myenv" en lugar de "source generate myenv"
teter123f

31

La respuesta sugerida es parcialmente correcta. Deberá agregar la opción --prune para desinstalar también los paquetes que se eliminaron del environment.yml. Comando correcto:

conda env update -f local.yml --prune

Incluso la bandera --prune no es suficiente para eliminar las dependencias instaladas pip ...
Jean Paul

Cierto. Creo que eliminará las dependencias de conda, pero no las enumeradas en pip
Parpadeo

22

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. La desactivación del 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!

44
¿Cómo sabe conda qué env actualizar si no es el actualmente activo?
Thomas Fauskanger

55
@ThomasFauskanger puede especificarlo explícitamente -n <environment name>, pero de manera predeterminada parece funcionar con el entorno esperado (tal vez la opción activa más reciente, o simplemente una opción de entorno predeterminada)
Dave

18
@ThomasFauskanger El nombre del entorno se especifica en el archivo YAML si ha sido exportado por conda.
Thomas

Pensé que el viejo punto de esta pregunta es actualizar un entorno diferente al especificado en el archivo yaml.
Giacomo

1
@ThomasFauskanger el archivo yaml incluye el nombre del entorno
Abdulrahman Bres
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.