evandam.conda
evandam.conda
Gestiona tu(s) entorno(s) conda con Ansible. Crea nuevos entornos conda, instala, actualiza y elimina paquetes.
Similar al módulo pip, esto permite pasar una lista en el campo name
. Esto resulta en un uso rápido y eficiente de los comandos conda.
El rol está diseñado para hacer que el módulo conda
esté disponible para su uso en tareas posteriores.
Requisitos
- conda (probar en
4.5.0
y versiones superiores)
Ejemplo Básico de Playbook
---
- name: Probar evandam.conda
hosts: all
roles:
- role: evandam.conda
tasks:
- name: Actualizar conda
conda:
name: conda
state: latest
executable: /opt/conda/bin/conda
- name: Crear un entorno conda
conda:
name: python
version: 3.7
environment: python3
state: present
- name: Instalar algunos paquetes en el entorno
conda:
name:
- pandas
- numpy
- tensorflow
environment: python3
- name: Instalar R, usando un nombre versión
conda:
name: r-base=3.5.0
Ejemplo con bucle de variables y aceleración de Mamba
Supongamos que tenemos un archivo yaml-diccionario/lista (./software/conda.yaml), definiendo todos nuestros entornos y los paquetes listos para instalar de la siguiente manera:
Control_de_calidad:
- afterqc
- multiqc
- trimmomatic
Ensamblaje:
- spades
- megahit
Esto puede ser beneficioso por varias razones. Primero, puedes separar diferentes implementaciones y configuraciones de software en ramas git discretas que solo referencian este archivo. En segundo lugar, si tienes colaboradores que no son expertos en git, solo tienen que preocuparse por editar este archivo específico para actualizar cualquier implementación de software que necesiten, y se puede hacer fácilmente editando este archivo en bruto en el navegador. En tercer lugar, usar un bucle de variables simplifica mucho nuestro código, como se ve en el siguiente ejemplo.
El siguiente playbook consta de 3 partes discretas (y asume que anaconda ya está instalado):
- Analiza el mencionado conda.yaml para que nuestros entornos y paquetes objetivo estén claramente definidos. (óptimamente, los canales también deberían analizarse de esta manera, pero en este ejemplo somos un poco perezosos y los codificamos de forma fija).
- Instala Mamba en el entorno base (ver al final para la explicación).
- Recorre nuestra variable "envs" creando cada entorno definido e instalando sus paquetes usando Mamba.
---
- name: Instalar entornos y paquetes de Conda
hosts: my_remote_machine
roles:
- role: evandam.conda
remote_user: admin
become: yes
tasks:
- include_vars:
file: ./software/conda.yaml
name: envs
- name: Instalar Mamba en el entorno base usando conda estándar
become_user: user
conda:
environment: base
name: mamba
state: latest
channels:
- conda-forge
executable: /opt/miniconda3/bin/conda
- name: Crear entornos de Conda e instalar paquetes usando Mamba en lugar de Conda por defecto
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 }}"
Notas sobre Mamba
Una de las desventajas de usar Anaconda como gestor de paquetes es el tamaño de los canales. Para ciertos paquetes, especialmente de conda-forge, el solucionador del entorno puede usar horas de cálculo para averiguar las dependencias antes de que inicie cualquier instalación. La solución: Mamba/Micromamba. Mamba envuelve el ejecutable conda, implementando el solucionador en C++, haciéndolo extremadamente rápido (nota el cambio en la directiva ejecutable de conda a mamba en la última tarea). Como ejemplo del mundo real, con más de 30 entornos para una implementación de curso estudiantil, esto redujo el tiempo de implementación de 2.5 horas a 15 minutos.
Licencia
BSD
Manage conda environments and packages
ansible-galaxy install evandam.conda