3. Snakemake 安装与配置环境(Conda / Mamba)

好,到这一章,我们要开始动手装东西了。Snakemake 本身是个 Python 包,但它的魔力在于能帮你管理各种工具的版本和环境。如果你直接拿 pip 装,那就浪费了它一半的能力。

我们先聊点实在的。生物信息学圈子里,依赖地狱是家常便饭。GATK 要 Java 11,某个小工具要 Python 2.7,另一个又要 R 4.0。手动装,你早晚会疯。这时候,Conda 就是我的救星。

3.1 为什么用 Conda / Mamba?

Conda,说白了,是个环境管理工具。它让你可以给每个项目,甚至每个工具,单独搞一套隔离的软件环境。互不干扰,干净清爽。

但我个人习惯用 Mamba。Mamba 是用 C++ 重写的 Conda 包管理器。它的核心优势就一个字:快。处理依赖解析时,Conda 可能会让你等到咖啡凉,Mamba 基本几秒搞定。

特性 Conda Mamba
解析速度 慢(树形求解) 快(SAT求解 + 并行化)
内存占用 较高 低
命令行兼容性 原生 完全兼容 Conda 命令
推荐场景 轻量需求 复杂管线、多环境
我个人的小建议: 别纠结,直接上 Mamba。Snakemake 官方现在也推荐 Mamba。你可以把 Mamba 当成 Conda 的“涡轮增压版”。

3.2 安装 Mamba(或 Conda)

我们不会直接装裸 Conda,而是装 Miniforge 或者 Mambaforge。它们都自带 Mamba。我推荐后者,装完就能用。

# 下载 Mambaforge 安装脚本
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh

# 执行安装(注意:默认位置是 ~/mambaforge)
bash Mambaforge-Linux-x86_64.sh

# 安装过程中,回答 yes 将所有问题
# 最后一步,是否初始化环境?选 yes

装完之后,关掉终端重新开一个。然后运行检查:

mamba --version

看到版本号,说明成功了。

我曾经踩过的坑: 第一次装时,我选了 no 初始化。结果每次都要手动 source ~/mambaforge/etc/profile.d/conda.sh 才能用。烦得很。所以,老老实实让它自动修改 .bashrc。

3.3 安装 Snakemake

Snakemake 可以直接用 Mamba 装,但我建议创建独立环境。这样以后升级或删除都不影响全局。

# 创建一个新环境,名字叫 snakemake_env
mamba create -n snakemake_env -c conda-forge -c bioconda snakemake

# 激活环境
conda activate snakemake_env

# 验证
snakemake --version

嗯,这里要注意:conda activate 是通用命令,Mamba 完全兼容。我们的 Snakemake 就装在这个环境里了。

3.4 配置频道(Channel)优先级

频道,就是软件包来源。生物信息学最强的三个频道是:

  • conda-forge:社区维护,包最全
  • bioconda:生物信息学专用,GATK、BWA、Samtools 都在这里
  • defaults:官方源,但更新慢

频道顺序很重要。Mamba 会从上到下搜索包。我推荐这样配置:

conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge

为什么这样排? conda-forge 在最上面,因为它更新最勤,包版本新。bioconda 第二。defaults 兜底。

验证频道顺序: 运行 conda config --show channels。应该看到列表类似 ['conda-forge', 'bioconda', 'defaults']。

3.5 环境验证:来个简单测试

装好之后,我们跑个小例子,确认 Snakemake 能调用 Mamba 创建子环境。创建一个空文件 Snakefile,写入:

rule test_mamba:
    conda:
        "envs/test_env.yaml"
    shell:
        "python --version"

再创建 envs/test_env.yaml:

channels:
  - conda-forge
dependencies:
  - python=3.10

然后,在终端运行:

snakemake --cores 1 --use-conda

你会看到 Snakemake 自动用 Mamba 下载并安装了 Python 3.10 环境。第一次可能慢点,后面就秒速了。这个机制,就是我们整个 GATK 管线的基石。

3.6 实战案例:Mamba 安装 GATK

为了让你感受下这套流程的威力,我直接演示:用 Mamba 装 GATK4。这在传统安装中,需要手动搞定 Java 和 jar 包,各种版本匹配问题。现在一句话搞定:

mamba install -c bioconda gatk4

它会自动解析依赖,装好 Java 11 和 GATK 本身。运行 gatk --help 就能看到一堆帮助信息。我最初做管线时,手动配 GATK 环境花了半天。用 Mamba,3 分钟解决。

3.7 避坑指南

我曾经遇到的坑:
  • 权限问题: 如果你在共享服务器上,没有 root 权限,那么 Mamba 默认安装到你的 home 目录,天然可用。但别用 sudo 去装 Mamba,会搞乱系统 Python。
  • 环境冲突: 不要在 base 环境里装太多东西。把所有工具放在独立环境里。Snakemake 通过 --use-conda 自动创建,你都不用操心。
  • 频道顺序错误: 如果把 bioconda 放在 conda-forge 上面,有时会装到旧版本包。我调过好几次。

3.8 本章知识图谱

下面这张图,把整个环境的搭建逻辑串了一遍。你从安装 Mamba 开始,到创建 Snakemake 环境,再到用 Conda 配置自动化创建 GATK 子环境,最终跑通一个简单管线。

Snakemake 环境搭建逻辑 安装 Mamba 创建 Snakemake 环境 配置 Conda 频道 Snakefile 编写 YAML 环境定义 运行 --use-conda Mamba 自动创建&安装子环境 Snakemake 通过 --use-conda 触发 Mamba,自动解析 Snakefile 中 conda 指令,下载并隔离工具。