2. 安装 Snakemake:用 pip 还是 conda?

这章我们真刀真枪地动手安装。Snakemake 的安装方式主要有两种:pip 和 conda。你可能会纠结选哪个,我建议你先看完这两种方式的区别,再根据自己的环境做决定。

2.1 环境准备:Python 版本别踩坑

Snakemake 要求 Python ≥3.7。我个人习惯用 Python 3.9 或 3.10,太新的版本有时候第三方依赖还没跟上。你可以先检查一下自己的 Python 版本:

python --version

如果版本低于 3.7,赶紧升级。我在项目中遇到过有人用 Python 3.6 硬装,结果报了一堆依赖冲突,折腾了两小时才反应过来是版本问题。

2.2 方式一:用 pip 安装(轻量首选)

pip 是 Python 自带的包管理器,安装简单,适合已经熟悉 Python 生态的同学。

pip install snakemake

如果你想装最新版(包含未正式发布的特性),可以加 --pre 参数:

pip install --pre snakemake

但我不建议在生产流水线上用预发布版,你想想看,万一某个接口改了,你的流程就全崩了。

小技巧: 建议在虚拟环境里安装,避免污染全局 Python。
python -m venv snakemake_env
source snakemake_env/bin/activate  # Windows 用 .\Scripts\activate
pip install snakemake

2.3 方式二:用 conda 安装(科研环境首选)

conda 不光管 Python 包,还能管理非 Python 的依赖(比如 R、C++ 工具)。这对生信工作流特别友好——因为很多工具不是纯 Python 的。

conda install -c conda-forge -c bioconda snakemake

这里指定了 conda-forge 和 bioconda 两个频道。bioconda 是生物信息方向的主频道,Snakemake 在那里维护得比较好。

如果你想要最小化安装(只装核心,不带可选依赖),可以:

conda install -c conda-forge -c bioconda snakemake-minimal

不过,我建议新手直接用 snakemake 而不是 minimal。否则后面你发现缺少某个功能(比如集群提交),还得回过头来补装,很烦。

注意: conda 安装时如果网速慢,可以考虑用国内镜像(比如清华 tuna 源)加速。不过镜像同步常有延迟,装之前先查一下版本号。

2.4 两种方式的对比

特性 pip conda
安装速度 较快(从 PyPI 下载) 较慢(依赖解析耗时长)
依赖管理 只处理 Python 包 可处理非 Python 工具
环境隔离 需配合 venv 或 virtualenv 自带环境隔离
适用场景 纯 Python 流程 / 轻量使用 生物信息 / 多语言依赖流程
版本锁定 使用 requirements.txt 使用 environment.yml

看完这个表,你应该有判断了。纯 Python 项目用 pip 就好;如果涉及外部工具(比如 samtools、bwa、bedtools 这类),conda 会省心很多。我在实际项目中两种都用过,现在偏向 conda,因为一条 environment.yml 就能把整条流水线的环境锁死,换机器也方便。

2.5 验证安装是否成功

装完了得验证一下,别光看进度条走完就以为万事大吉。我的习惯是三步走:

  1. 检查版本号
snakemake --version

正常会输出类似 7.32.4 的数字。如果报 command not found,说明环境变量没配好,或者你忘了激活虚拟环境。

  1. 查看帮助信息
snakemake --help

看到一长串参数列表就对了。这里特别留意一下 --cores、--jobs、--config 这些常用参数,后面会用很多。

  1. 跑一个最小示例

创建一个名为 Snakefile 的文件,写入以下内容:

rule all:
    input: "hello.txt"

rule say_hello:
    output: "hello.txt"
    shell: "echo 'Hello, Snakemake!' > hello.txt"

然后在终端执行:

snakemake -c1

看到输出包含 Building DAG of jobs... 并且最终生成了 hello.txt,里面写着 Hello, Snakemake!,那就算安装成功了。

顺便说一句: 如果你用的是 conda 安装,Snakemake 会自动用内置的 mamba 来加速依赖解析。你会发现第一次装 snakemake 时,conda 会提示“Installing with mamba”,速度比裸 conda 快好几倍。

2.6 安装过程中常踩的坑

我曾经遇到一个典型案例:某位同事用 pip 安装 Snakemake 后,执行 snakemake --version 正常,但一跑规则就报 ModuleNotFoundError: No module named 'networkx'。原因是他的 pip 版本太老,没有自动拉取所有依赖。解决方案很简单:升级 pip 后再装一遍。

pip install --upgrade pip
pip install snakemake

还有一个常见坑:conda 安装时提示 PackagesNotFoundError。这通常是频道顺序或网络问题。先确认你加了 conda-forge 和 bioconda,并且顺序要对——bioconda 的推荐顺序是 conda-forge 优先:

conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge

然后重试安装。说白了,conda 在频道解析上有点任性,你按官方推荐顺序走就对了。

2.7 知识体系图:安装与验证流程

下面这张图总结了从环境检查到验证完成的整个路径,你可以把它当作战术地图贴在工位上。

Snakemake 安装与验证流程 检查 Python ≥3.7 选择安装方式 pip install snakemake conda install snakemake snakemake --version snakemake --help 运行最小示例 Snakefile 安装完成 ✅ 💡 pip vs conda 选择建议 • 纯 Python → pip • 含外部工具 → conda

2.8 清理与重装

如果你之前装过老版本 Snakemake,或者装到一半失败了,需要彻底清理后再重装。我自己的习惯是:

# pip 版
pip uninstall snakemake -y
pip cache purge
pip install snakemake

# conda 版
conda remove snakemake -y
conda clean --all -y
conda install -c conda-forge -c bioconda snakemake

记得 conda clean --all 会把缓存里的压缩包也删掉,能避免一些奇奇怪怪的“已安装但找不到”问题。

2.9 小结

到这步,你的 Snakemake 应该已经跑起来了。通过 pip 或 conda 两种方式,你知道了它们各自的适用场景;通过三步验证,你确认了环境没有问题。后面的章节我们会拿真正的生物信息流程来折腾它——没有这一步,后面的内容全是空中楼阁。

核心检查清单:
  • Python 版本 ≥3.7
  • 安装成功(snakemake --version 输出正常)
  • 最小示例可运行(生成 hello.txt)
  • 熟记常用参数:--cores,--jobs,--config