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 获取一些基础依赖。

小技巧: 如果网速慢,可以换个国内镜像。我个人习惯用清华源,在 ~/.condarc 里配置一下,下载速度能快好几倍。

2.3 pip 安装方式

如果你确实只想要一个轻量级的安装,pip 也能搞定。但你要自己保证前置的系统库齐全。

pip install snakemake

嗯,就这么一行。但实际跑起来之后,你可能会遇到 graphviz 未安装的报错。这时候需要额外装:

# Ubuntu/Debian
sudo apt-get install graphviz

# macOS
brew install graphviz

然后是 Python 的绑定库:

pip install graphviz
我曾经碰到过: 用 pip 装完后,敲蛇 make 命令直接报 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 配置与代码分离,便于共享 多了一个文件管理
命令行传参 临时覆盖,灵活性最高 参数多了记不住
我的习惯: 先在 Snakefile 里用 configfile: "config.yaml" 加载默认配置。对于需要临时调整的参数,通过命令行 snakemake --config threads=4 覆盖。这样既保留默认值,又有灵活的调整空间。

2.7 本章小结:安装配置实操路线图

下面这张图可以帮你理清整个安装配置的流程。每次我教新人的时候,都会拿这张图让他们先看一遍,再动手操作。

Snakemake 安装配置流程图 Snakemake 安装与配置核心路线 选择安装方式 conda 方式(推荐) pip 方式(轻量) 创建独立环境 安装 Snakemake 安装 graphviz pip install snakemake 验证安装 编写 Snakefile 与 config.yaml

照着这张图一步步走,基本上不会出大错。如果某个环节卡住了,回头看看那些红色或橙色的提示框,那都是我踩过的坑。