2. 安装与配置:Snakemake的安装与起步
好了,咱们正式开始动手。这一章我们先把 Snakemake 跑起来。
很多新手问我:“装个生信工具而已,有啥好讲的?” 嗯,这里面的坑其实不少。我最初就因为在错误的环境里装了旧版本,折腾了一整天。所以咱们先把环境搭好,后面才能走得顺。
2.1 安装方式的选择:conda vs pip
Snakemake 的安装路径主要有两条:conda 和 pip。我个人更推荐 conda 方式。为什么?因为 Snakemake 依赖的很多底层库(比如 graphviz、pandas、networkx),用 pip 装有时候会缺系统级的库文件,报一些奇奇怪怪的错误。
你可以根据你的实际情况来选择:
| 特点 | conda 方式 | pip 方式 |
|---|---|---|
| 依赖管理 | 自动处理系统级库 | 只处理 Python 依赖 |
| 环境隔离 | 原生支持,推荐 | 依赖 virtualenv |
| 生信生态 | bioconda 里有大量现成包 | 需要自己编译 |
| 适用场景 | 新手首选,团队协作 | 已有纯 Python 环境 |
2.2 conda 环境安装(推荐)
先说重点:永远不要在 base 环境里直接装。你想想看,每个项目对 Snakemake 的版本要求不一样,混在一起迟早出事。我见过同事把 base 环境搞崩,最后不得不重装 Miniconda 的血泪教训。
正确做法是创建一个独立环境:
conda create -n snake_env python=3.9
conda activate snake_env
环境激活后,再装 Snakemake:
conda install -c conda-forge -c bioconda snakemake
这里有两个频道:conda-forge 和 bioconda。bioconda 是生信软件的主战场,Snakemake 本身属于通用工具,所以也要从 conda-forge 获取一些基础依赖。
2.3 pip 安装方式
如果你确实只想要一个轻量级的安装,pip 也能搞定。但你要自己保证前置的系统库齐全。
pip install snakemake
嗯,就这么一行。但实际跑起来之后,你可能会遇到 graphviz 未安装的报错。这时候需要额外装:
# Ubuntu/Debian
sudo apt-get install graphviz
# macOS
brew install graphviz
然后是 Python 的绑定库:
pip install graphviz
ModuleNotFoundError: No module named 'snakemake'。后来发现是因为系统里同时有 Python 2 和 Python 3,pip 默认装到了 2 下面。所以安装前一定确认一下你的 pip 绑定了哪个 Python。
2.4 Python 环境要求
Snakemake 对 Python 版本有要求。目前主流的版本是 Python 3.7 到 3.11 都支持。我个人建议用 Python 3.9 或 3.10,这两个版本稳定,而且社区支持最好。
为什么不能太老或太新?太老了(比如 Python 3.6)有些新特性用不了;太新了(比如 Python 3.12)有些依赖库还没适配。你想想看,生信工具链的更新速度通常比 Python 官方慢半拍,稳妥点没坏处。
确认版本的方法很简单:
python --version
conda info --envs # 看看有没有冲突的环境
2.5 验证安装
装完之后,咱们跑一个最简单的命令来验证一下:
snakemake --version
snakemake --help
如果能看到版本号,说明安装成功了。我一般还会跑一下 snakemake --help,看看命令列表是不是正常显示。如果这里报错,大概率是依赖有问题,需要回头再检查一下。
创建一个空目录,然后运行:
snakemake -n snake_env
应该会输出 “Nothing to be done.” 这样的信息。这表示 Snakemake 能正常启动,只是没有 Snakefile 让它干活。
2.6 配置文件初探
Snakemake 的配置主要分两种:流程内配置和外部配置文件。
先说流程内配置。它写在 Snakefile 里,用 Python 字典的格式:
# Snakefile 片段
config = {
"input_dir": "data/raw",
"output_dir": "results",
"threads": 8,
"memory": "16GB"
}
然后在规则里通过 config["input_dir"] 来引用。这种方式的优点是简单直接,小流程用起来很方便。
外部配置文件则更灵活。它通常是一个 YAML 文件,比如 config.yaml:
# config.yaml
samples: ["sample_A", "sample_B", "sample_C"]
fastq_dir: /data/fastq
reference: /data/reference/genome.fasta
trim_params:
min_length: 36
max_length: 150
然后在 Snakefile 里加载它:
configfile: "config.yaml"
我个人更推荐用外部配置文件。为什么?因为等你把流程分享给同事的时候,他们只需要改这个 YAML 文件,不用动 Snakefile 本身。你想想看,是不是既安全又省事?
| 配置方式 | 优点 | 缺点 |
|---|---|---|
| 流程内配置 | 简单,小流程首选 | 修改需要编辑 Snakefile |
| 外部 YAML | 配置与代码分离,便于共享 | 多了一个文件管理 |
| 命令行传参 | 临时覆盖,灵活性最高 | 参数多了记不住 |
configfile: "config.yaml" 加载默认配置。对于需要临时调整的参数,通过命令行 snakemake --config threads=4 覆盖。这样既保留默认值,又有灵活的调整空间。
2.7 本章小结:安装配置实操路线图
下面这张图可以帮你理清整个安装配置的流程。每次我教新人的时候,都会拿这张图让他们先看一遍,再动手操作。
照着这张图一步步走,基本上不会出大错。如果某个环节卡住了,回头看看那些红色或橙色的提示框,那都是我踩过的坑。