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

4 minutos de lectura

¿Cómo se puede actualizar un entorno conda preexistente con otro archivo .yml? Esto es extremadamente útil cuando se trabaja en proyectos que tienen varios archivos de requisitos, es decir, base.yml, local.yml, production.ymletc.

Por ejemplo, a continuación se muestra un base.yml El archivo tiene 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 tarde, se deben agregar paquetes adicionales a base.yml. Otro archivo, digamos local.ymlnecesita importar esas actualizaciones.

Los intentos anteriores para 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 ejecuta 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 mencionado en el archivo yml.

    – Sorén

    7 de noviembre de 2019 a las 4:49

  • esto podría ser útil para empezar desde cero: conda env create -f ~/CoqGym/coq_gym.yml (ver: stackoverflow.com/questions/54492671/…)

    –Charlie Parker

    4 de enero de 2021 a las 20:46


avatar de usuario
alkamid

Intenta usar actualización de conda env:

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

--prune desinstala dependencias que fueron eliminadas de local.ymlcomo se señala en esta respuesta de @Blink.

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

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

Ver Actualización de un entorno en la Guía del usuario de Conda.

  • No necesitas el signo igual entre -f y file.yml. Quitar el signo igual hará que la terminación de pestañas funcione en el .yml Nombre del archivo.

    – BolígrafoBen

    9 de mayo de 2018 a las 14:42

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

    – Numes Sanguis

    15 de noviembre de 2019 a las 9:22

  • En la versión más reciente de conda, creo que usamos “conda activar myenv” en lugar de “fuente activar myenv”

    – caja de luz142

    17 de febrero de 2020 a las 16:11

  • ¿Hay alguna manera de que podamos pasar un argumento en el que este comando simplemente actualice las bibliotecas disponibles en los archivos .yml, lo que garantizará que no se produzca un error cuando alguna de las bibliotecas enumeradas no esté disponible?

    – dan

    6 de noviembre de 2020 a las 22:42


  • asegúrese de que el archivo YAML no tenga name parámetro, de lo contrario crea con este actualizar dominio

    – Dima Lituiev

    24 de diciembre de 2020 a las 21:48

La respuesta sugerida es parcialmente correcta. Tendrá que agregar el –ciruela pasa opción para desinstalar también los paquetes que se eliminaron del entorno.yml. Comando correcto:

conda env update -f local.yml --prune

  • Incluso el –ciruela pasa la bandera no es suficiente para eliminar las dependencias instaladas de pip …

    – Juan Pablo

    4 de marzo de 2020 a las 13:03

  • Verdadero. Creo que eliminará las dependencias de conda pero no las enumeradas en pip

    – Parpadear

    5 de marzo de 2020 a las 16:49

  • ¿Hay alguna manera de que podamos pasar un argumento en el que este comando simplemente actualice las bibliotecas disponibles en los archivos .yml, lo que garantizará que no se produzca un error cuando alguna de las bibliotecas enumeradas no esté disponible?

    – dan

    6 de noviembre de 2020 a las 22:42

  • ¿Habría algún problema si mi requirements.yml archivo tiene un name: ¿en la cima?

    –Charlie Parker

    27 de abril de 2021 a las 14:42

La respuesta de alkamid está en las líneas correctas, 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!

  • ¿Cómo sabe Conda qué env actualizar si no es el actualmente activo?

    –Tomás Fauskanger

    18 de julio de 2018 a las 16:35

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

    – Dave

    18 de julio de 2018 a las 17:36

  • @ThomasFauskanger El nombre del entorno se especifica en el archivo YAML si conda lo ha exportado.

    – Tomás

    30 de agosto de 2018 a las 7:42

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

    – Giacomo

    1 de agosto de 2019 a las 21:02

  • @ThomasFauskanger el archivo yaml incluye el nombre del entorno

    – Abdulrahman Bress

    31 oct 2019 a las 21:03

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad