Comment mettre à jour un environnement Conda existant avec un fichier .yml


139

Comment un environnement conda préexistant peut-il être mis à jour avec un autre fichier .yml. Ceci est extrêmement utile lorsque vous travaillez sur des projets qui ont plusieurs fichiers d'exigences, c'est base.yml, local.yml, production.yml-à- dire , etc.

Par exemple, vous trouverez ci-dessous un base.ymlfichier contenant les packages conda-forge, conda et pip:

base.yml

name: myenv
channels:
  - conda-forge
dependencies:
  - django=1.10.5
  - pip:
    - django-crispy-forms==1.6.1

L'environnement réel est créé avec: conda env create -f base.yml.

Plus tard, des packages supplémentaires devront être ajoutés base.yml. Un autre fichier, par exemple local.yml, doit importer ces mises à jour.

Les tentatives précédentes pour accomplir ceci incluent:

création d'un local.ymlfichier avec une définition d'importation:

channels:

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

Et puis exécutez la commande suivante : conda install -f local.yml.

Cela ne fonctionne pas. Des pensées?


Est-il possible de mettre à jour l'environnement actuellement activé ?? J'ai juste essayé ceci mais la mise à jour est allée à l'environnement nommé dans le fichier yml.
— Sören

Réponses:


203

Essayez d'utiliser la mise à jour de conda env :

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

Ou sans avoir besoin d'activer l'environnement (merci @NumesSanguis):

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

12
Vous n'avez pas besoin du signe égal entre -fet file.yml. La suppression du signe égal fera fonctionner la complétion de tabulation sur le .ymlnom de fichier.
— BallpointBen

4
Ajoutez --name env_namepour ignorer toute name: foobalise dans local.yml. Empêche également la nécessité d'activer myenv en premier. Commande complète: conda env update --name env_name --file local.yml De: stackoverflow.com/a/45525593/3399066 Commentaire de
— NumesSanguis

1
Dans la version la plus récente de conda, je pense que nous utilisons "conda activate myenv" au lieu de "source activate myenv"
— teter123f

32

La réponse suggérée est partiellement correcte. Vous devrez ajouter l' option --prune pour désinstaller également les packages qui ont été supprimés de l'environnement.yml. Commande correcte:

conda env update -f local.yml --prune

Même l' indicateur --prune ne suffit pas pour supprimer les dépendances installées de pip ...
— Jean Paul

Vrai. Je pense que cela supprimera les dépendances conda mais pas celles répertoriées sous pip
— Blink

22

La réponse d'alkamid est sur les bonnes lignes, mais j'ai trouvé que Conda ne parvient pas à installer de nouvelles dépendances si l'environnement est déjà actif. La désactivation de l'environnement résout d'abord ce problème:

source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!

4
Comment conda sait-il quel environnement mettre à jour s'il n'est pas actuellement actif?
— Thomas Fauskanger

5
@ThomasFauskanger, vous pouvez le spécifier explicitement avec -n <environment name>, mais par défaut, il semble fonctionner avec l'environnement attendu (peut-être le plus récemment actif, ou simplement un choix d'environnement par défaut)
— Dave

18
@ThomasFauskanger Le nom de l'environnement est spécifié dans le fichier YAML s'il a été exporté par conda.
— Thomas

Je pensais que l'ancien point de cette question était de mettre à jour un environnement différent de celui spécifié dans le fichier yaml.
— Giacomo

1
@ThomasFauskanger le fichier yaml comprend le nom de l'environnement
— Abdulrahman Bres
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.