第3章 安装 Snakemake —— 把工具拿到手

写工作流之前,总得先把卡车开进车库吧?这一章咱们就来搞定 Snakemake 的安装。说实话,安装这事看着简单,可我在不同项目里踩过的坑能装一箩筐。咱们一步步来,你跟着走就行。

3.1 推荐 Python 环境

我个人的习惯是,但凡涉及生物信息的工作流,一定用 Conda 或 Miniforge 管理环境。为什么?因为很多依赖(比如 samtools、STAR 这些)用 pip 根本装不了,而 Conda 能一把抓。

选哪个发行版? 我建议你用 Miniforge,它默认走 conda-forge 频道,比 Anaconda 轻量,而且没有商业授权问题。如果你已经在用 Anaconda,也没关系,后面注意加 -c conda-forge 就行。

Snakemake 目前对 Python 3.8 ~ 3.11 支持最好。我记得在 Python 3.12 刚出来的时候,我手快升级了,结果 Snakemake 的某个依赖 datrie 编译报错,折腾了半天。所以稳妥点,就用 3.9 或 3.10。

3.2 使用 Conda 安装(推荐)

先创建一个独立环境,名字随你,比如 snakemake-env:

conda create -n snakemake-env -c conda-forge python=3.10
conda activate snakemake-env

然后安装 Snakemake。完整版带所有可选依赖:

conda install -c conda-forge -c bioconda snakemake

如果你只需要核心功能,可以装 minimal 版本,省空间:

conda install -c conda-forge -c bioconda snakemake-minimal
个人经验: 我在一个服务器上装完整版时,发现它拖了 pandas、matplotlib 等一堆包。如果你只是跑纯流程、不作图,minimal 版本更清爽。但空间转录组的数据集通常很大,我建议用完整版,因为后面很可能需要 scanpy 或 pandas 做后处理。

3.3 使用 pip 安装

如果你坚持用 pip,也可以。不过我得提醒你:Snakemake 的某些依赖需要编译 C 扩展,比如 sortedcontainers 和 datrie。万一缺编译工具链,会报一长串错误。我曾经在 CentOS 上直接 pip install snakemake,结果 gcc 没装,卡了半小时。

建议先在虚拟环境里做好心理准备:

python -m venv snakemake-venv
source snakemake-venv/bin/activate
pip install --upgrade pip
pip install snakemake

如果想装最新开发版:

pip install git+https://github.com/snakemake/snakemake.git
注意: pip 安装的 Snakemake 默认不带 conda 插件支持。如果你打算用 Snakemake 的 --use-conda 功能自动管理软件依赖(空间转录组流程里非常常见),那就必须用 Conda 安装,或者额外装 conda 包。

3.4 验证安装

装好之后,先确认版本:

snakemake --version

你应该能看到类似 8.x.x 或 7.x.x 的数字(写本文时最新的稳定版是 8.5.0)。我习惯同时看看帮助信息是否正常:

snakemake --help | head -20

然后跑一个最小的测试工作流。新建一个空目录,创建 Snakefile:

rule all:
    input:
        "test.txt"

rule create_test:
    output:
        "test.txt"
    shell:
        "echo 'Snakemake works!' > {output}"

运行:

snakemake -j 1

如果看到 test.txt 被创建,内容为 Snakemake works!,那就成功了。嗯,这一步虽然简单,但能帮你确认核心解析和 shell 执行没问题。我在帮同事排查问题时,常常就用这个最小例子来检验环境是否真的“通了”。

3.5 安装方式对比

特性 Conda 安装 pip 安装
环境隔离 天然自带(conda env) 需要自行 virtualenv
依赖完整性 完整,包含 conda 插件 核心功能,缺少 conda 整合
非 Python 工具 可通过 conda 一键装(如 samtools) 需要自行安装
安装速度 较慢(解析依赖树) 较快(如果二进制包可用)
适合场景 空间转录组工作流(强烈推荐) 纯 Python 流程或快速测试

3.6 常见问题与避坑

  • Python 版本不对: 我之前用 Python 3.12 装 Snakemake 8.0,报 ImportError: cannot import name 'Mapping' from 'collections'。这是因为 datrie 还没适配。降级到 3.10 就好了。
  • 权限问题: 在共享服务器上,别用 sudo pip install。创建你自己的 conda 环境或者 venv,把权限封死在用户目录里。
  • conda 网络慢: 配置国内镜像(比如清华 tuna),或者用 mamba 替代 conda 做包解析:conda install mamba -c conda-forge,然后 mamba install snakemake,快很多。
  • 版本冲突: 如果你同时装 snakemake 和 snakemake-minimal,环境会乱。建议只选一个。
小技巧: 安装完成后,用 conda list | grep snakemake 查看具体包版本和来源频道,方便日后排查。

3.7 本章知识脉络

下面这张图总结了从环境准备到验证的几个关键节点,方便你对照:

Snakemake 安装流程 选择环境工具 Conda / Miniforge pip + venv 创建环境 (Python 3.10) 安装 Snakemake 验证安装 (--version) ✅ 运行最小测试工作流

其实安装这一步,最关键的只有两点:选对 Python 版本、用好 conda 环境。剩下的大部分问题都能靠 --help 和搜索引擎解决。只要你能在终端敲出 snakemake --version 并看到版本号,后面的事就顺了。

一句话总结: 空间转录组工作流请用 conda create -n snakemake-env python=3.10 -c conda-forge,然后 conda install snakemake -c conda-forge -c bioconda。其他方式在验证通过后也行,但别给自己找麻烦。