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 -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。否则后面你发现缺少某个功能(比如集群提交),还得回过头来补装,很烦。
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 验证安装是否成功
装完了得验证一下,别光看进度条走完就以为万事大吉。我的习惯是三步走:
- 检查版本号
snakemake --version
正常会输出类似 7.32.4 的数字。如果报 command not found,说明环境变量没配好,或者你忘了激活虚拟环境。
- 查看帮助信息
snakemake --help
看到一长串参数列表就对了。这里特别留意一下 --cores、--jobs、--config 这些常用参数,后面会用很多。
- 跑一个最小示例
创建一个名为 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!,那就算安装成功了。
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 知识体系图:安装与验证流程
下面这张图总结了从环境检查到验证完成的整个路径,你可以把它当作战术地图贴在工位上。
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