evandam.conda
evandam.conda
Gérez vos environnements conda avec Ansible. Créez de nouveaux environnements conda, installez, mettez à jour et supprimez des paquets.
Comme pour le module pip, il est possible de passer une liste dans le champ name
. Cela permet une utilisation rapide et efficace des commandes conda.
Le rôle est conçu pour rendre le module conda
disponible pour une utilisation dans les tâches suivantes.
Exigences
- conda (testé avec
4.5.0
et supérieur)
Exemple de Playbook Basique
---
- name: Tester evandam.conda
hosts: all
roles:
- role: evandam.conda
tasks:
- name: Mettre à jour conda
conda:
name: conda
state: latest
executable: /opt/conda/bin/conda
- name: Créer un environnement conda
conda:
name: python
version: 3.7
environment: python3
state: present
- name: Installer des paquets dans l'environnement
conda:
name:
- pandas
- numpy
- tensorflow
environment: python3
- name: Installer R, en utilisant un nom versionné
conda:
name: r-base=3.5.0
Exemple avec bouclage de variables et optimisation Mamba
Supposons que nous ayons un fichier yaml-liste (./software/conda.yaml), définissant tous nos environnements et leurs paquets préparés pour installation comme ceci :
Quality_control:
- afterqc
- multiqc
- trimmomatic
Assembly:
- spades
- megahit
Ceci peut être bénéfique pour plusieurs raisons. Tout d'abord, vous pouvez séparer différents déploiements et configurations logicielles dans des branches git distinctes faisant référence uniquement à ce fichier. Deuxièmement, si vous avez des collaborateurs qui ne connaissent pas bien git, ils doivent seulement s'inquiéter de modifier ce fichier spécifique pour mettre à jour les déploiements logiciels dont ils ont besoin, ce qui peut être fait facilement par exemple en modifiant ce fichier brut dans le navigateur. Troisièmement, en utilisant une boucle de variables, cela simplifie beaucoup notre code, comme le montre le prochain exemple.
Le playbook suivant se compose de 3 parties distinctes (et suppose qu'Anaconda est déjà installé)
- Il analyse le conda.yaml mentionné précédemment, de sorte que nos environnements cibles et paquets soient déjà définis. (idéalement, les canaux devraient également être analysés de cette façon, mais dans cet exemple, nous sommes paresseux et les avons codés en dur)
- Installe Mamba dans l'environnement de base (voir en bas pour explication).
- Effectue une boucle à travers notre variable "envs", créant chaque environnement défini et installant ses paquets en utilisant Mamba.
---
- name: Installer les environnements Conda et les paquets
hosts: ma_machine_distante
roles:
- role: evandam.conda
remote_user: admin
become: yes
tasks:
- include_vars:
file: ./software/conda.yaml
name: envs
- name: Installer Mamba dans l'environnement de base en utilisant conda standard
become_user: user
conda:
environment: base
name: mamba
state: latest
channels:
- conda-forge
executable: /opt/miniconda3/bin/conda
- name: Créer des environnements Conda et installer des paquets en utilisant Mamba au lieu de Conda par défaut
become_user: user
conda:
environment: "{{item.key}}"
name: "{{item.value}}"
state: latest
channels:
- bioconda
- conda-forge
- defaults
executable: /opt/miniconda3/bin/mamba
loop: "{{ envs | dict2items }}"
Remarques sur Mamba
Un des inconvénients de l'utilisation d'Anaconda comme gestionnaire de paquets est le grand nombre de canaux. Pour certains paquets, en particulier ceux de conda-forge, le résolveur d'environnement peut prendre des heures à calculer les dépendances avant même que l'installation ne commence. La solution : Mamba/Micromamba. Mamba enveloppe l'exécutable conda, implémentant le résolveur en C++, ce qui le rend extrêmement rapide (remarquez le changement de directive d'exécutable de conda à mamba dans la dernière tâche). Par exemple, avec plus de 30 environnements pour un déploiement de cours, cela a réduit le temps de déploiement de 2,5 heures à 15 minutes !
Licence
BSD
Manage conda environments and packages
ansible-galaxy install evandam.conda