第3章 安装 Snakemake —— 把工具拿到手
写工作流之前,总得先把卡车开进车库吧?这一章咱们就来搞定 Snakemake 的安装。说实话,安装这事看着简单,可我在不同项目里踩过的坑能装一箩筐。咱们一步步来,你跟着走就行。
3.1 推荐 Python 环境
我个人的习惯是,但凡涉及生物信息的工作流,一定用 Conda 或 Miniforge 管理环境。为什么?因为很多依赖(比如 samtools、STAR 这些)用 pip 根本装不了,而 Conda 能一把抓。
-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
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 本章知识脉络
下面这张图总结了从环境准备到验证的几个关键节点,方便你对照:
其实安装这一步,最关键的只有两点:选对 Python 版本、用好 conda 环境。剩下的大部分问题都能靠 --help 和搜索引擎解决。只要你能在终端敲出 snakemake --version 并看到版本号,后面的事就顺了。
conda create -n snakemake-env python=3.10 -c conda-forge,然后 conda install snakemake -c conda-forge -c bioconda。其他方式在验证通过后也行,但别给自己找麻烦。