evandam.conda
evandam.conda
Zarządzaj swoimi środowiskami conda za pomocą Ansible. Twórz nowe środowiska conda, instaluj, aktualizuj i usuwaj pakiety.
Podobnie jak moduł pip, ten moduł wspiera przekazywanie listy do pola name
. Umożliwia to szybkie i efektywne korzystanie z komend conda.
Rola została zaprojektowana, aby udostępnić moduł conda
do wykorzystania w kolejnych zadaniach.
Wymagania
- conda (przetestowany na
4.5.0
i nowszych)
Przykład podstawowego playbooka
---
- name: Test evandam.conda
hosts: all
roles:
- role: evandam.conda
tasks:
- name: Aktualizacja conda
conda:
name: conda
state: latest
executable: /opt/conda/bin/conda
- name: Utworzenie środowiska conda
conda:
name: python
version: 3.7
environment: python3
state: present
- name: Instalacja pakietów w środowisku
conda:
name:
- pandas
- numpy
- tensorflow
environment: python3
- name: Instalacja R, używając wersjonowanej nazwy
conda:
name: r-base=3.5.0
Przykład z pętlą zmiennych i przyspieszeniem Mamba
Załóżmy, że mamy plik yaml z listą (./software/conda.yaml), definiującą wszystkie nasze środowiska i pakiety przygotowane do instalacji w ten sposób:
Quality_control:
- afterqc
- multiqc
- trimmomatic
Assembly:
- spades
- megahit
To może być korzystne z kilku powodów. Po pierwsze, można oddzielić różne wdrożenia i konfiguracje oprogramowania w oddzielnych gałęziach git, odnosząc się tylko do tego pliku. Po drugie, jeśli masz współpracowników, którzy nie są zaznajomieni z gitem, muszą zająć się jedynie edytowaniem tego konkretnego pliku, aby zaktualizować jakiekolwiek wdrożenia oprogramowania, co można zrobić łatwo, np. edytując ten plik w przeglądarce. Po trzecie, korzystając z pętli zmiennych, znacznie upraszcza nasz kod. Jak pokazano w następnym przykładzie.
Następujący playbook składa się z 3 oddzielnych części (zakładając, że anaconda jest już zainstalowana):
- Parsuje wcześniej wspomniany plik conda.yaml, aby nasze docelowe środowiska i pakiety były gotowe do użytku. (optymalnie, kanały powinny być również parsowane w ten sposób, ale w tym przykładzie jesteśmy leniwi i twardo kodujemy je tutaj)
- Instaluje Mambę w podstawowym środowisku (zobacz na dole za wyjaśnienie).
- Przechodzi przez naszą zmienną "envs", tworząc każde zdefiniowane środowisko i instalując jego pakiety przy użyciu Mamby.
---
- name: Instalacja środowisk Conda i pakietów
hosts: my_remote_machine
roles:
- role: evandam.conda
remote_user: admin
become: yes
tasks:
- include_vars:
file: ./software/conda.yaml
name: envs
- name: Instalacja Mamby w podstawowym środowisku za pomocą standardowego conda
become_user: user
conda:
environment: base
name: mamba
state: latest
channels:
- conda-forge
executable: /opt/miniconda3/bin/conda
- name: Tworzenie środowisk Conda i instalacja pakietów przy użyciu Mamby zamiast domyślnego 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 }}"
Notatki o Mambie
Jednym z niedogodności korzystania z Anacondy jako menedżera pakietów są rozbudowane kanały. W przypadku niektórych pakietów, szczególnie z conda-forge, rozwiązywacz środowisk może zużywać godziny obliczeń, aby ustalić zależności, zanim jakakolwiek instalacja się rozpocznie. Rozwiązaniem jest Mamba/Micromamba. Mamba opakowuje wykonywalny plik conda, implementując rozwiązywacz w C++, co czyni go niezwykle szybkim (zauważ zmianę polecenia wykonawczego z conda na mamba w ostatnim zadaniu). Jako przykład z prawdziwego świata, przy ponad 30 środowiskach dla wdrożenia kursu studenckiego, czas wdrożenia zmniejszył się z 2,5 godziny do 15 minut!
Licencja
BSD
Manage conda environments and packages
ansible-galaxy install evandam.conda