安装 Snakemake:环境要求、conda/pip 安装、验证安装
说实话,很多新手一上来就急着写 Snakefile,结果装都装不对,折腾半天。
我个人习惯是,先花 10 分钟把环境理清楚。这个时间省不掉。
这一章,我带你走一遍完整的安装流程。从系统检查,到两种安装方式的选择,再到最后的验证。
环境要求:先看看你的系统准备好了没
安装前,先确认你的机器满足条件。不然后面报错,你都不知道从哪查起。
我记得刚开始用 Snakemake 时,用了个 Python 2.7 的环境,死活装不上。后来才发现,这工具早就不支持 2 了。
下面这张表,就是最基本的门槛:
| 项目 | 要求 | 备注 |
|---|---|---|
| Python 版本 | ≥ 3.8 | 强烈推荐 3.9 或 3.10 |
| 操作系统 | Linux / macOS / Windows (WSL2) | Windows 原生支持有限,用 WSL2 最省心 |
| 磁盘空间 | 至少 2GB 空闲 | 主要是 conda 环境和缓存占用 |
| 网络连接 | 需要 | 安装包和依赖需要从网络下载 |
这里有个容易忽略的点——磁盘。别小看它。conda 环境装多了,轻易就吃掉十几 GB。我有个项目,光 bioconda 的依赖就占了 8GB。
两种主流安装方式:conda vs pip
Snakemake 的安装方式,说白了就两条路:conda 和 pip。
很多新手会纠结选哪个。我直接给你结论:
| 安装方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| conda | 新手、需要管理多个工具链、生物信息项目 | 自动处理非 Python 依赖(如 samtools、bwa) | 环境解析慢,包体积大 |
| pip | 纯 Python 项目、已有虚拟环境、熟悉 venv | 安装快,轻量 | 需要自行安装系统级工具(如 graphviz、R) |
我个人习惯这样:
- 做生信、复杂流程 —— 用 conda。它能帮你把 samtools、bedtools 这些外部工具一起装了,省事。
- 纯 Python 项目、测试、CI/CD —— 用 pip。轻装上阵,跑得快。
你想想看,如果你的流程里掺了外部工具,用 pip 装完 Snakemake,还得手动装那些工具。多麻烦。conda 一步到位。我建议新手直接用 conda。
方法一:使用 conda 安装
假设你已经装好了 miniconda 或 anaconda。没装?赶紧去装一个。这是正经建议。
安装步骤,我拆成三条命令:
- 创建一个新环境,指定 Python 版本。
- 激活环境。
- 安装 Snakemake 核心包。
具体命令:
conda create -n snakemake_env python=3.10 -y
conda activate snakemake_env
conda install -c conda-forge -c bioconda snakemake -y
这里我用的是两个频道:conda-forge 和 bioconda。顺序不能乱。
conda-forge:通用频道,优先级高。bioconda:生物信息频道,Snakemake 的很多依赖都在这里。
conda-libmamba-solver,能快很多。
安装完成后,确认一下:
conda activate snakemake_env
which snakemake
输出应该是一个路径,指向你的 conda 环境里的可执行文件。
我在项目中遇到过一个问题:明明装了,但系统提示"command not found"。后来发现是环境没激活。记住,每次用 Snakemake 之前,先 conda activate snakemake_env。
方法二:使用 pip 安装
如果你已经是 Python 老手,或者项目环境已经用 venv/poetry 管理了,那用 pip 会更顺手。
执行以下命令:
python3 -m venv snakemake_venv
source snakemake_venv/bin/activate
pip install snakemake
或者,如果你不想建虚拟环境(虽然我强烈不建议你这么做):
pip install --user snakemake
pip 的安装速度通常比 conda 快。但有个坑:Snakemake 依赖的一些系统工具(比如 graphviz、R、wget),pip 不会自动帮你装。你得自己搞定。
brew install graphviz。Linux 上也类似,用 apt 或 yum 搞定。这样 pip + 系统包管理器组合,既快又全。
我个人更习惯用 conda,但如果你只是跑纯 Python 的流程,pip 真的就够了。轻啊。
验证安装:确认 Snakemake 已就绪
装都装完了,怎么知道它真的能用?三个验证点:
- 确认版本号 —— 看版本是否正常,有没有报错。
- 查看帮助信息 —— 确认命令行能正确解析。
- 运行一个最小测试用例 —— 确认核心功能正常。
先来最简单的:
snakemake --version
正常会输出类似 7.32.4 的版本号。如果报错,比如提示 "command not found",说明没装对,或者环境没激活。
再看帮助:
snakemake --help
输出应该很长,列出所有命令行参数。能看到参数列表,基本就稳了。
最后,我建议你跑一个最小测试。创建一个空目录,在里面建一个 Snakefile:
# Snakefile
rule all:
input:
"test.txt"
rule create_test:
output:
"test.txt"
shell:
"echo 'Hello Snakemake' > {output}"
然后在终端执行:
snakemake -c1
正常输出应该像这样:
Building DAG of jobs...
Using shell: /bin/bash
Provided cores: 1 (use --cores to define parallelism)
Rules claiming more threads will be scaled down.
Job stats:
job count min threads max threads
---------- ------- ------------- -------------
all 1 1 1
create_test 1 1 1
total 2 1 1
Select jobs to execute...
Execute 1 jobs...
[Mon Nov 18 13:42:21 2024]
rule create_test:
output: test.txt
jobid: 1
reason: Missing output files: test.txt
resources: tmpdir=/var/folders/...
Execute 1 jobs...
1 of 2 steps (50%) done
Execute 1 jobs...
2 of 2 steps (100%) done
然后检查 test.txt 是否生成,内容是不是 "Hello Snakemake"。
验证成功标志:
snakemake --version输出版本号snakemake --help显示全部参数- 最小 Snakefile 能正常跑通,生成目标文件
我曾经踩过一个坑:本地跑的版本是 7.x,但服务器上装的是 5.x。语法不一样,导致流程在服务器上跑不通。所以我建议你把版本输出记下来,放到文档里。后面出问题,版本差异是第一个要排除的因素。