第2章 Snakemake安装:pip、conda、源码编译与版本选择
安装Snakemake这件事,说简单也简单,说坑也多。我刚开始接触Snakemake时,直接pip install snakemake就用了,结果跑集群调度时发现缺一堆依赖。后来踩了不少坑,今天就把几种安装方式掰开揉碎了讲清楚。
2.1 pip安装——最常用的方式
pip是Python生态的标配。Snakemake作为纯Python包,pip安装最符合直觉。我个人习惯先用pip install snakemake试水,如果缺依赖再逐个补。
pip install snakemake
这会安装Snakemake核心以及最基础的依赖:wrapt、ratelimiter、toposort、setuptools等。但注意——不包含集群支持和报告生成扩展。
安装扩展功能
实际项目中,你通常需要以下附加组件:
| 功能 | pip命令 | 说明 |
|---|---|---|
| 集群支持(Slurm/SGE/PBS等) | pip install snakemake[executor] | 安装分布式任务执行依赖 |
| 报告生成 | pip install snakemake[reports] | 支持--report |
| Google Cloud、Azure等云 | pip install snakemake[cloud] | 云集群后端 |
| 全部功能 | pip install snakemake[all] | 懒人包,但依赖多 |
pip install snakemake[all],结果装了一堆不必要的云SDK,导致环境混乱。建议按需安装,比如只用Slurm就用pip install snakemake[executor]。
使用虚拟环境
我强烈建议在虚拟环境中安装——无论是在个人笔记本还是服务器上。避免污染系统Python,也更方便版本切换。
python -m venv snakemake_env
source snakemake_env/bin/activate
pip install --upgrade pip
pip install snakemake
pip install snakemake -i https://pypi.tuna.tsinghua.edu.cn/simple
2.2 conda安装——生物信息学标配
生物信息学领域,conda几乎是事实标准。Snakemake官方推荐通过bioconda频道安装。我在搭建生信平台时,通常先用conda,因为它能自动解决依赖链问题。
确保你已安装Miniconda或Anaconda。然后添加频道:
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
conda config --set channel_priority strict
安装命令很简单:
conda install -c bioconda snakemake
这会安装Snakemake以及所有运行时依赖,包括python、setuptools等。Condat会帮你解析依赖树,通常一次搞定。
创建独立环境
我建议为Snakemake单独创建一个环境,避免和其他包打架:
conda create -n snakemake_env -c bioconda -c conda-forge snakemake
conda activate snakemake_env
如果还需要报告支持:
conda install -c conda-forge -c bioconda snakemake snakemake-minimal
这里snakemake-minimal是轻量版,只包含核心,适合集群环境。
2.3 源码编译——开发者/尝鲜者专属
当你需要修改Snakemake源码,或者想体验官方尚未发布的特性时,源码编译是唯一选择。我有一次为了测试某个PR的新功能,就是靠源码安装的。
首先从GitHub克隆仓库:
git clone https://github.com/snakemake/snakemake.git
cd snakemake
Snakemake 7.x之后使用Poetry进行依赖管理。建议先安装Poetry:
pip install poetry
然后安装开发依赖并构建:
poetry install
# 或者导出requirements.txt后用pip安装
poetry export -f requirements.txt --output requirements.txt
pip install -r requirements.txt
pip install -e .
第二种方法更传统,用pip install -e .进入可编辑模式,方便你修改代码后立即生效。
python setup.py install,结果因为Python版本和依赖版本不匹配,编译失败。现在Poetry能处理好这些,但记得先检查pyproject.toml中的Python版本要求(通常≥3.7)。
版本分支选择
| 分支/标签 | 适用场景 | 稳定性 |
|---|---|---|
main | 开发中最新代码 | 可能不稳定 |
v7.x | 稳定版(推荐生产使用) | 高 |
v6.x | 旧版,部分遗留项目仍需 | 高(停止维护) |
v8.x-dev | 尝鲜新特性(如内置DAG可视化) | 低 |
切换到特定版本:
git checkout v7.32.4
poetry install
2.4 版本选择——别用太老也别用太新
版本选择是个平衡艺术。我见过有人用Snakemake 5.x跑了三年,换到6.x时规则语法大变,改代码改到崩溃。另一面,有人追新版本,结果碰到兼容性bug。
版本生命周期
| 版本系列 | 发布时间 | 维护状态 | 备注 |
|---|---|---|---|
| 5.x | 2019-2020 | 已停止 | 旧语法,不建议新项目使用 |
| 6.x | 2021-2022 | 安全修复 | 仍可运行,但功能少 |
| 7.x | 2022-2024 | 活跃 | 推荐选择(当前主流) |
| 8.x | 2024+ | 测试版 | 不推荐生产环境 |
如何选择
- 新项目:直接上7.x最新小版本(如7.32)。功能全,社区支持好。
- 维护旧项目:保持已有版本,除非有安全修复需求。
- 集群上使用:选择与生物信息学软件兼容的版本。我在某超算中心就碰到conda的snakemake版本和系统Python冲突,最后手动指定了7.18.0。
2.5 验证安装
不管哪种方式,装完后记得验证:
snakemake --version
# 例如输出:7.32.4
如果出现command not found,检查Python路径和虚拟环境是否激活。也可以试试:
python -m snakemake --version
查看帮助信息:
snakemake --help
能正常显示帮助页,说明安装成功。
Snakefile,内容写:rule all: input: "test.txt",然后执行snakemake -n,看是否报错。
2.6 常见安装问题与解决方案
| 问题 | 原因 | 解决 |
|---|---|---|
ModuleNotFoundError: No module named 'wrapt' | pip安装不完整 | pip install wrapt ratelimiter toposort |
| conda安装极慢 | 频道解析依赖耗时 | 使用mamba替代conda:mamba install snakemake |
集群模式报drmaa错误 | 缺少DRMAA库 | conda install -c conda-forge drmaa 或 pip install snakemake[executor] |
| 提示Python版本过低 | Snakemake 7.x要求Python≥3.7 | 升级Python或使用conda环境 |
源码编译报错poetry: command not found | 未安装Poetry | pip install poetry |
安装看似简单,但环境差异会导致各种奇怪问题。嗯,这里要特别提醒:不要直接在生产服务器的系统Python上安装。虚拟环境或者conda环境是你的好朋友。
我记得有一次帮同事排查,他在CentOS上直接用sudo pip install snakemake,结果把系统Python搞坏了,所有命令都报错。最终重装了Python才解决。从那以后,我就一直坚持先python -m venv work_env再安装。
好了,安装环节就这些。接下来你需要确保Snakemake能正常调用,然后就可以开始写你的第一个工作流了。