evandam.conda
evandam.conda
使用 Ansible 管理您的 conda 环境。可以创建新的 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 加速的示例
假设我们在一个文件(./software/conda.yaml)中有一个 yaml 字典/列表,定义了我们所有的环境及其待安装的包,如下所示:
质量控制:
- afterqc
- multiqc
- trimmomatic
组装:
- spades
- megahit
这有几个好处。首先,您可以在单独的 git 分支中分开不同的部署和软件设置,仅引用此文件。其次,如果您有不熟悉 git 的合作者,他们只需担心编辑这个特定的文件即可更新所需的软件部署,并且可以很容易地通过在浏览器中编辑这个原始文件完成。第三,使用变量循环,可以大大简化我们的代码。在下一个示例中可以看到这一点。
以下剧本由三个独立部分组成(假设已经安装了 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: 使用标准 conda 在基本环境中安装 Mamba
become_user: user
conda:
environment: base
name: mamba
state: latest
channels:
- conda-forge
executable: /opt/miniconda3/bin/conda
- name: 使用 Mamba 而不是默认的 Conda 创建 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