1. Snakemake 简介与安装
1.1 Snakemake 是什么?
简单来说,Snakemake 是一个基于 Python 的工作流管理工具。它专门用来处理那些步骤多、依赖乱、数据量大的分析流程。在药物分子数据预处理里,我们经常要搞“下载→清洗→标准化→特征提取→格式转换”这一套,每一环都可能有几十个文件,人工一个一个跑,既累又容易出错。Snakemake 就是替你把这一切自动串起来的那个“导演”。
我个人觉得,Snakemake 最大的魅力在于“声明式”规则。你不需要写一坨脚本去判断哪个文件是否生成、什么时候该跑下一步;你只需要定义好 规则,告诉它输入是什么、输出是什么、用哪个 shell 命令或 Python 脚本来干活,剩下的依赖解析、并行调度、失败重试,Snakemake 全帮你搞定。说白了,它就是把你脑袋里的“流程图”变成可执行代码的神器。
snakemake --cores 8,而且每一步的 log 都清清楚楚。从那以后,我再也没用过手写脚本串流程。
Snakemake 的核心理念其实非常直白:基于规则(rule)的有向无环图(DAG)执行。你定义一堆规则,每个规则声明输入文件和输出文件,Snakemake 自动分析各个规则之间的数据依赖关系,构建出 DAG,然后从最下游的输出一路回溯,按需执行所有上游规则。它会自动跳过那些已经生成且未过期的文件,大大节省重复计算的时间。
• 原始数据格式五花八门(SDF, SMILES, CSV, MOL2…),每个步骤都需要转换。
• 中间产物繁多,一旦出错需要从断点续跑。
• 经常需要对海量分子做并行处理,Snakemake 天然支持多核和集群。
• 研究者希望可重现——一个 Snakefile + 配置文件就能复现整个预处理。
下面这张图能帮你快速建立整体印象:
1.2 安装 Snakemake
安装方式有好几种,我推荐你用 Conda 或 pip 安装,因为这两者都能自动处理好 Python 依赖。如果你搞药物分子数据,很可能已经在用 Conda 管理环境了。
1.2.1 通过 Conda 安装(推荐)
Conda 安装最稳妥。我个人习惯给每个项目建独立环境,避免包冲突。
conda create -n snakemake_env -c conda-forge -c bioconda snakemake
conda activate snakemake_env
解释一下: -c conda-forge -c bioconda 指定两个渠道,conda-forge 是通用包仓库,bioconda 是生物信息学的仓库,Snakemake 的两个源都有,但 bioconda 版本通常更新更快。如果你只需要基础功能,conda-forge 就够了。
1.2.2 通过 pip 安装
如果你已经有一个 Python 环境且不想装 Conda,pip 也能装。不过要注意,Snakemake 有些底层依赖(比如 graphviz 绘图)可能需要系统库。
pip install snakemake
嗯,这里要提醒一下:如果只用 pip,建议先装好 graphviz 和 libcurl。不然跑 snakemake --dag 可视化的时候会报错。不过大部分情况下,pip 装的也能正常干活。
1.2.3 其他安装方式
除了上面两种,还有 Linux 系统包管理器(如 apt install snakemake),但版本通常比较老。还有直接从 GitHub 源码安装的方式,但那更适合开发者。对于咱们做药物分子预处理的,个人觉得 conda 或 pip 就足够了。
1.3 验证安装
装好后,第一件事就是确认它能跑。打开终端,激活环境(如果用 conda 的话),执行:
snakemake --version
能看到类似 7.32.4 的输出,就说明安装成功了。
接下来做个最简单的测试。创建一个空目录,在里面放一个 Snakefile 文件,内容就写一个空规则:
# Snakefile
rule all:
input:
"dummy.txt"
然后运行:
snakemake -n
-n 是 dry-run 模式,只打印计划不真执行。如果它没有报错,并且显示了类似 Job stats: count (1) 的信息,说明 Snakemake 能正确解析 Snakefile。这就代表你的基本环境是没问题的。
为什么非要跑一个 dry-run?嗯,因为我遇到过有人装完 snakemake 后 ——version 能出来,但一跑真实工作流就报错,最后发现是 graphviz 没装。所以建议你 至少做一次 dry-run,确认解析功能正常。
1.4 安装后快速上手建议
到这里,Snakemake 已经能用了。但我个人经验是,先别急着写复杂流程,用几个小规则找找手感。比如写一个“把 CSV 转成 TSV”的规则,再用 snakemake --dag 看一下依赖图——你会直观感受到“声明式”的美妙。
snakemake --dag 生成图时,终端里会出现 dot 代码。你可以把它们保存成文件,再用 graphviz 渲染成 PDF:snakemake --dag | dot -Tpdf > dag.pdf
一张清晰的工作流图就出来了。这对于向同事解释你的预处理流程特别有用。