conda
evandam.conda
Управляйте своими окружениями conda с помощью Ansible. Создавайте новые окружения conda, устанавливайте, обновляйте и удаляйте пакеты.
Подобно модулю pip, этот модуль поддерживает передачу списка в поле name
. Это обеспечивает быструю и эффективную работу с командами conda.
Роль создана, чтобы сделать модуль conda
доступным для использования в последующих задачах.
Требования
- conda (тестировалось на
4.5.0
и выше)
Пример базового плейбука
---
- name: Тестирование evandam.conda
hosts: all
roles:
- role: evandam.conda
tasks:
- name: Обновить conda
conda:
name: conda
state: latest
executable: /opt/conda/bin/conda
- name: Создать окружение conda
conda:
name: python
version: 3.7
environment: python3
state: present
- name: Установить некоторые пакеты в окружение
conda:
name:
- pandas
- numpy
- tensorflow
environment: python3
- name: Установить R, используя версию
conda:
name: r-base=3.5.0
Пример с изменением переменных и ускорением Mamba
Предположим, у нас есть yaml-словарь/список в файле (./software/conda.yaml), который определяет все наши окружения и их пакеты, подготовленные для установки, следующим образом:
Quality_control:
- afterqc
- multiqc
- trimmomatic
Assembly:
- spades
- megahit
Это может быть полезно по нескольким причинам. Во-первых, вы можете разделять разные развертывания и программные настройки на отдельных git-ветках, ссылаясь только на этот файл. Во-вторых, если у вас есть коллеги, которые не разбираются в git, им нужно будет беспокоиться только об редактировании этого конкретного файла, чтобы обновить любые необходимые программные развертывания, и это можно сделать легко, например, редактируя этот файл в браузере. В-третьих, используя цикл по переменным, мы значительно упрощаем наш код. Как видно в следующем примере.
Следующий плейбук состоит из 3 отдельных частей (предполагается, что anaconda уже установлена):
- Он разбирает ранее упомянутый conda.yaml, чтобы наши целевые окружения и пакеты были заранее определены. (Оптимально, также следует разбирать каналы подобным образом, но в этом примере мы ленивы и жестко кодируем их.)
- Устанавливает Mamba в базовом окружении (подробности ниже).
- Проходит по нашей переменной "envs", создавая каждое определенное окружение и устанавливая его пакеты с помощью Mamba.
---
- name: Установить окружения Conda и пакеты
hosts: my_remote_machine
roles:
- role: evandam.conda
remote_user: admin
become: yes
tasks:
- include_vars:
file: ./software/conda.yaml
name: envs
- name: Установить Mamba в базовом окружении с использованием стандартного conda
become_user: user
conda:
environment: base
name: mamba
state: latest
channels:
- conda-forge
executable: /opt/miniconda3/bin/conda
- name: Создать окружения Conda и установить пакеты с использованием Mamba вместо стандартного 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 }}"
Заметки о Mamba
Одним из недостатков использования Anaconda как менеджера пакетов является баг, связанный с большими каналами. Для некоторых пакетов, особенно от conda-forge, решатель окружения может использовать часы вычислений, чтобы выяснить зависимости еще до того, как начнется установка. Решение: Mamba/Micromamba. Mamba оборачивает исполняемый файл conda, реализуя решатель на C++, что делает его невероятно быстрым (обратите внимание на изменение директивы исполняемого файла: с conda на mamba в последней задаче). В качестве примера из реальной жизни, с более чем 30 окружениями для развертывания учебного курса, это сократило время развертывания с 2,5 часов до 15 минут!
Лицензия
BSD
Manage conda environments and packages
ansible-galaxy install evandam/evandam.conda