358 votes

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

Comment mettre à jour un environnement Conda préexistant avec un autre fichier .yml ? Ceci est extrêmement utile lorsque l'on travaille sur des projets qui ont de multiples fichiers d'exigences, c'est-à-dire base.yml, local.yml, production.yml etc.

Par exemple, vous trouverez ci-dessous un base.yml a les paquets 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 .

Par la suite, des paquets supplémentaires doivent être ajoutés à base.yml . Un autre fichier, par exemple local.yml doit importer ces mises à jour.

Les tentatives précédentes pour y parvenir comprennent :

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

channels:

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

Et puis lancez la commande : conda install -f local.yml .

Cela ne fonctionne pas. Une idée ?

1 votes

Est-il possible de mettre à jour l'environnement actuellement activé ? Je viens d'essayer mais la mise à jour est allée à l'environnement nommé dans le fichier yml.

0 votes

Il pourrait être utile de repartir de zéro : conda env create -f ~/CoqGym/coq_gym.yml (voir : stackoverflow.com/questions/54492671/ )

557voto

alkamid Points 831

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

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

--prune désinstalle les dépendances qui ont été supprimées de l'application local.yml comme indiqué dans cette réponse par @Blink.

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

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

Voir Mise à jour d'un environnement dans le Guide de l'utilisateur de Conda.

20 votes

Vous n'avez pas besoin du signe égal entre -f y file.yml . En supprimant le signe égal, l'achèvement de la tabulation fonctionnera sur le fichier .yml le nom du fichier.

23 votes

Ajouter --name env_name d'ignorer toute name: foo tag dans local.yml . Evite également d'avoir à activer myenv en premier. Commande complète : conda env update --name env_name --file local.yml De : stackoverflow.com/a/45525593/3399066 Commentaire de l'auteur

3 votes

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

80voto

Blink Points 63

La réponse proposée est partiellement correcte. Vous devez ajouter le --prune pour désinstaller également les paquets qui ont été supprimés de l'environnement.yml. Commande correcte :

conda env update -f local.yml --prune

4 votes

Même le --prune n'est pas suffisant pour supprimer les dépendances installées par pip...

0 votes

C'est vrai. Je pense que cela supprimera les dépendances de Conda mais pas celles listées sous Pip.

1 votes

Y a-t-il un moyen de passer un argument pour que cette commande mette à jour les bibliothèques disponibles dans les fichiers .yml, ce qui garantira qu'aucune erreur ne sera générée si l'une des bibliothèques listées n'est pas disponible ?

35voto

Dave Points 7854

La réponse d'alkamid est dans la bonne ligne, mais j'ai constaté que Conda ne parvient pas à installer de nouvelles dépendances si l'environnement est déjà actif. La désactivation préalable de l'environnement résout ce problème :

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

7 votes

Comment conda sait-il quel env mettre à jour si ce n'est pas celui qui est actuellement actif ?

6 votes

@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).

21 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X