第2章 环境安装:让Snakemake跑起来
说实话,很多初学者觉得环境安装就是输几条命令的事,不值得花时间。但我在项目中遇到过太多次“环境水土不服”的惨案——有的因为Python版本冲突,有的因为依赖包死活装不上,折腾半天结果发现是conda环境没激活。这一章,咱们就稳扎稳打,把Snakemake安好、验好、摸清楚基本命令。跟我来。
2.1 安装方式:选conda还是pip?
Snakemake官方推荐两种安装方式:conda和pip。我个人习惯用conda,尤其是在做生物信息学项目时,因为conda能帮你把底层Python、R、系统工具链都管起来,不容易出现“装好了却跑不了”的尴尬。
不过话说回来,如果你只是想在临时环境里试试水,或者团队已经统一用pip管理,那pip也没问题。只是一旦遇到依赖冲突,别怪我没提醒你——pip的哭诉指数要比conda高不少。
下面我把两种方法都列出来,你按需选择就好。
方式一:通过conda安装(推荐)
# 先安装miniconda(如果还没装)
# 下载地址:https://docs.conda.io/en/latest/miniconda.html
# 创建一个新环境,避免污染base
conda create -n snakemake_env python=3.10
conda activate snakemake_env
# 安装snakemake
conda install -c conda-forge -c bioconda snakemake
# 等待进度条跑完……(去接杯咖啡)
安装过程中,conda会自动处理依赖关系。如果网络慢,可以加上-c defaults或切换国内镜像(清华、中科大)。
方式二:通过pip安装
# 推荐在虚拟环境中安装
python -m venv snakemake_venv
source snakemake_venv/bin/activate # Windows用 .\Snakemake_venv\Scripts\activate
# 安装snakemake
pip install snakemake
pip安装速度快,但有个坑:它不会自动安装一些系统级依赖(比如用于集群作业提交的drmaa)。如果你要上集群,还是建议用conda。
snakemake --scheduler时直接报错,说缺少portalocker。后来发现pip没有自动拉这个依赖。conda就没这个问题。所以,如果是生信生产环境,我强烈推荐conda。
2.2 验证安装:让snakemake说句话
装完别急着关终端。先跑几个命令确认一下。
# 查看版本号
snakemake --version
# 查看帮助信息
snakemake -h
# 如果能显示版本号(比如7.32.x),就说明核心安装成功了。
版本号出来之后,我习惯再跑一个“最小可行性测试”:
# 创建一个测试目录
mkdir test_snake && cd test_snake
# 写一个最小Snakefile
echo "rule all:
input:
'hello.txt'
rule write_hello:
output:
'hello.txt'
shell:
'echo \"Snakemake works!\" > {output}'" > Snakefile
# 试运行(干跑,不实际执行文件)
snakemake -n
# 正式跑
snakemake -j 1
如果终端输出Snakemake works!,并且当前目录多了hello.txt,恭喜,环境安装完成。
snakemake找不到,试试重新打开终端或手动执行source ~/.bashrc。conda环境的记得先conda activate snakemake_env。
2.3 Snakemake命令行基本用法
安装验证通过后,咱们来聊聊Snakemake命令行常用的几个参数。说真的,Snakemake的命令行参数特别多(snakemake -h能刷五六屏),但日常你只用其中几个核心的就够了。其他参数,遇到了再查手册也不迟。
| 参数 | 含义 | 我的使用习惯 |
|---|---|---|
-n |
干跑(dry-run),只显示要做什么,不实际执行 | 写新流程时必加,先看看依赖对不对 |
-j N |
并行使用的CPU核心数(N=1,2,4...) | 本地测试用-j 1,服务器用-j 8 |
-p |
打印正在执行的shell命令 | 调试时加,方便看实际跑的什么命令 |
--dag |
以DAG图格式输出执行计划(配合dot可以画图) | 用来可视化工作流,演讲时很好用 |
-s |
指定Snakefile路径(默认当前目录下的Snakefile) | 如果项目有多个Snakefile,用这个区分 |
--config |
从命令行传入配置变量 | 临时覆盖参数时用,比改配置文件方便 |
-F |
强制重新运行所有规则,无视已有输出 | 修改了输入后想重新计算全部,就用这个 |
举个例子,你写了一个质控流程,想先看看它会怎么跑,再决定要不要调:
cd /data/raw_fastq
snakemake -n -p
# 如果一切OK,用4个核心正式跑
snakemake -j 4 -p
嗯,这里有个小窍门:加上-p参数能帮你在调试时看到每条shell命令的具体内容,而不会把{wildcards}这种变量原封不动地摆在那儿。我刚开始学Snakemake时,干跑一看-p的输出,好多错误一下子就清楚了。
2.4 快速上手:用Snakemake跑一条最简单的命令
趁热打铁,咱们用刚才学的命令行参数,演示一次完整流程。假设你想批量压缩fastq文件:
# 在项目目录下创建Snakefile
cat > Snakefile << 'EOF'
rule gzip_fastq:
input:
"sample1.fastq"
output:
"sample1.fastq.gz"
shell:
"gzip {input} -c > {output}"
EOF
# 验证流程
snakemake -n
# 正式跑(先确保当前目录有sample1.fastq)
snakemake -j 1 -p
你想想看,这本质上就是一个自动化脚本,但Snakemake帮你管理了输入输出依赖、并行度、文件更新检查等脏活累活。等后面学到通配符和多样本批量处理时,你会更理解它的威力。
本章知识框架
图里把本章的脉络画得很清楚了:先装环境,再验证,最后熟悉关键命令,用一个小例子收尾。每一步都能踩出实物来。
2.5 本章小结(别往下翻,试试看能想起来几个命令)
- 安装:conda install -c conda-forge -c bioconda snakemake(推荐)或pip install snakemake
- 验证:snakemake --version,然后跑一个最小Snakefile
- 核心命令:-n干跑、-j并行、-p打印、--dag可视化、-s指定Snakefile、-F强制重跑
- 日常调试流程:先
snakemake -n看逻辑,再snakemake -j 4 -p正式跑
环境安装是后面所有章节的基石。我建议你现在就打开终端,把这一章的每一步都亲手敲一遍。一旦Snakemake跟你问好了,接下来咱们就可以真正开始搭建质控流水线了。