evandam.conda

evandam.conda

Build Status

Verwalte deine conda-Umgebung(en) mit Ansible. Erstelle neue conda-Umgebungen, installiere, aktualisiere und entferne Pakete.

Ähnlich wie das pip-Modul unterstützt dies das Übergeben einer Liste im name-Feld. Das führt zu einer schnellen und effizienten Nutzung der Ausführung von conda-Befehlen.

Die Rolle ist so konzipiert, dass das conda-Modul für nachfolgende Aufgaben verfügbar ist.

Anforderungen

  • conda (getestet auf 4.5.0 und höher)

Einfaches Beispiel-Playbook

---
- name: Test evandam.conda
  hosts: alle
  roles:
    - role: evandam.conda
  tasks:
    - name: Update conda
      conda:
        name: conda
        state: latest
        executable: /opt/conda/bin/conda
    - name: Erstelle eine conda-Umgebung
      conda:
        name: python
        version: 3.7
        environment: python3
        state: present
    - name: Installiere einige Pakete in der Umgebung
      conda:
        name:
          - pandas
          - numpy
          - tensorflow
        environment: python3
    - name: Installiere R, mit einem versionierten Namen
      conda:
        name: r-base=3.5.0

Beispiel mit Variablen-Schleifen und Mamba-Beschleunigung

Angenommen, wir haben ein yaml-Dict/Liste in einer Datei (./software/conda.yaml), die alle unsere Umgebungen und deren Pakete für die Installation definiert:

Qualitätskontrolle:
 - afterqc
 - multiqc
 - trimmomatic
Assembly:
 - spades
 - megahit

Das kann aus mehreren Gründen vorteilhaft sein. Erstens kannst du verschiedene Deployments und Software-Setups in getrennten git-Zweigen verwalten, die sich nur auf diese Datei beziehen. Zweitens, wenn du Mitwirkende hast, die sich nicht mit git auskennen, müssen sie sich nur darum kümmern, diese spezifische Datei zu bearbeiten, um die benötigten Software-Deployments zu aktualisieren, und das kann leicht z.B. durch Bearbeiten dieser Rohdatei im Browser geschehen. Drittens vereinfacht die Verwendung einer Variablen-Schleife unseren Code erheblich, wie im nächsten Beispiel zu sehen.

Das folgende Playbook besteht aus 3 Teilen (und geht davon aus, dass Anaconda bereits installiert ist):

  1. Es analysiert die zuvor erwähnte conda.yaml, sodass unsere Zielumgebungen und Pakete klar definiert sind. (Optimalerweise sollten auch die Channels so analysiert werden, aber in diesem Beispiel sind wir faul und hard-coden sie)
  2. Installiert Mamba in der Basisumgebung (siehe Erklärung unten).
  3. Durchläuft unsere "envs"-Variable, um jede definierte Umgebung zu erstellen und deren Pakete mit Mamba zu installieren.
---
- name: Installiere Conda-Umgebungen und Pakete
  hosts: mein_remote_machine
  roles:
    - role: evandam.conda
  remote_user: admin
  become: ja
  tasks:
    - include_vars:
      file: ./software/conda.yaml
      name: envs
    - name: Installiere Mamba in der Basisumgebung mit Standard-Conda
      become_user: user
      conda:
        environment: base
        name: mamba
        state: latest
        channels:
          - conda-forge
        executable: /opt/miniconda3/bin/conda
    - name: Erstelle Conda-Umgebungen und installiere Pakete mit Mamba anstelle des Standard-Conda
      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 }}"

Hinweise zu Mamba

Einer der Nachteile der Verwendung von Anaconda als Paketmanager sind die aufgeblähten Channels. Für bestimmte Pakete, insbesondere von conda-forge, kann der Umgebungs-Löser Stunden an Rechenzeit in Anspruch nehmen, um Abhängigkeiten zu klären, bevor eine Installation überhaupt beginnt. Die Lösung: Mamba/Micromamba. Mamba umschließt das ausführbare conda und implementiert den Solver in C++, was es extrem schnell macht (beachte die Änderung der ausführbaren Direktive von conda zu mamba im letzten Schritt). Als Beispiel aus der Praxis reduzierte dies bei etwa 30+ Umgebungen für den Einsatz eines Studentenkurses die Bereitstellungszeit von 2,5 Stunden auf 15 Minuten!

Lizenz

BSD

Über das Projekt

Manage conda environments and packages

Installieren
ansible-galaxy install evandam.conda
Lizenz
mit
Downloads
60.7k
Besitzer