第1章 Snakemake 简介与安装

做生信分析的人,谁还没被脚本串烧折磨过?

我刚入行那会儿,手里攒了一堆 Python、R 和 Shell 脚本。每次跑一个批次质控,都得手动调顺序、改路径、检查日志。哪个步骤崩了,还得从头来过。说实话,那会儿我就想要是有个工具能自动管理这些依赖,就能光明正大摸鱼了。

后来遇到了 Snakemake——说白了,它就是专门干这事的工作流管理引擎。你只需要告诉它:输入是什么,输出是什么,中间跑什么命令。剩下的依赖解析、并行调度、失败重跑,它全包了。

Snakemake 是什么

Snakemake 是一个基于 Python 的流程管理工具,核心思想是“规则”(rule)。一条规则定义三样东西:

  • 输入文件(input)——比如原始 fastq 数据
  • 输出文件(output)——比如质控报告
  • 执行命令(shell / run / script)——比如调用 FastQC

Snakemake 自动读取所有规则,构建一个有向无环图(DAG),然后按依赖顺序执行。它还会判断哪些输出已存在、需不需要重新跑。这在批次质控里特别省事:你只要把每个样本的规则写好,它会自动并行处理所有样本。

记住一句话:Snakemake 帮你想清楚“谁先谁后”,再替你“干活”。

为什么需要 Snakemake

你可能觉得,Makefile 不也能做类似的事?对,但 Makefile 是给编译用的,处理起生信软件的无穷依赖和奇葩报错,简直灾难。Snakemake 专门为此设计的:

  • 天然支持通配符——{sample} 代表样本名,一条规则就能匹配所有样本。
  • 集成 Conda 环境——每条规则可以用不同的软件环境,互不干扰。
  • 自动失败重试——网络波动导致的下载失败,Snakemake 能自动重跑。
  • 可视化 DAG——运行前就能看到流程结构,哪里漏了哪里错了,一目了然。

当然,最爽的还是它所有规则都写在 Snakefile 里,天然可重现。我当年给组里搭了一个批次 RNA-seq 质控流程,换了三个人维护都没出过路径混乱的问题——这要归功于 Snakemake 的强约束。

安装 Snakemake

安装方式很简单,两种主流方法我都用过,各有利弊。

方法一:Conda 安装(推荐)

如果你已经有 Conda(Miniconda/Anaconda),这是最省心的方式:

conda install -c conda-forge -c bioconda snakemake

加上 -c conda-forge 和 -c bioconda 是为了避免版本冲突。我第一次装的时候只用了 bioconda,结果依赖库打了一架……从那以后我每次都用双 channel。

如果你想隔离一个干净的环境:

conda create -n snakemake_env -c conda-forge -c bioconda snakemake
conda activate snakemake_env

方法二:pip 安装

如果你习惯用 pip,也可以:

pip install snakemake

不过要注意,pip 安装不会自动处理系统级的依赖(比如某些 C 库)。我在 CentOS 7 上用 pip 装过一次,启动时就报缺失 libcrypto.so.1.1——最后还是切回了 Conda。所以你如果服务器环境比较干净,可以试试 pip;否则我建议你直接用 Conda。

安装方式优点缺点我个人的选择
Conda依赖全、环境隔离好需要先装 Conda生产环境首选
pip轻量、不需要 Conda可能缺系统依赖快速尝鲜时用

我给你的建议:先装 Miniconda,然后用 Conda 安装 Snakemake。这样后面每条规则配不同软件环境也会方便很多。

验证安装

装好了?跑几行命令看看能不能正常工作。

snakemake --version

如果输出版本号,比如“7.32.4”,那就成功了一半。再试一个最简单的流程,创建 Snakefile:

rule all:
    output: "done.txt"
    shell:
        "touch done.txt"

然后执行:

snakemake -c1

-c1 表示只用一个核心。正常的话,你会看到 Snakemake 输出步骤日志,最后生成一个 done.txt。你可以检查一下文件是否真的出现了:

ls -l done.txt

如果看到文件,恭喜你——Snakemake 环境已经就绪。

我曾经碰过的坑:在 macOS 上用 pip 装,跑 snakefile 时提示 “/bin/sh: 1: conda: not found”。后来发现 Snakemake 7 之后内置了 Conda 集成,但系统 shell 没找到 conda 可执行文件。解决方法是在 ~/.bashrc 里加上 export PATH=$HOME/miniconda3/bin:$PATH,然后重新登录。

好了,到这一步,你的 Snakemake 已经可以正常工作了。接下来你会用它搭建真正的批次质控流程。

Snakemake 工作流核心概念 输入数据 fastq / bam / csv 规则:质控 FastQC 规则:比对 STAR / BWA 规则:统计 featureCounts 最终结果 质控报告 / 矩阵 安装方式 conda install -c conda-forge -c bioconda snakemake pip install snakemake

这张图展示的是 Snakemake 管理批次质控的典型结构。左侧输入数据,中间几个规则按依赖关系串起来,最终输出结果。Snakemake 在这里做的事,就是自动推导出这个流程,然后乖乖执行。

好了,环境就绪,概念也清楚了。接下来我们就要动手写真正的 Snakefile,跑一个完整的质控流程。