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 命令 |
| 推荐场景 | 轻量需求 | 复杂管线、多环境 |
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 子环境,最终跑通一个简单管线。