第2章 环境安装:让Snakemake跑起来

说实话,很多初学者觉得环境安装就是输几条命令的事,不值得花时间。但我在项目中遇到过太多次“环境水土不服”的惨案——有的因为Python版本冲突,有的因为依赖包死活装不上,折腾半天结果发现是conda环境没激活。这一章,咱们就稳扎稳打,把Snakemake安好、验好、摸清楚基本命令。跟我来。

2.1 安装方式:选conda还是pip?

Snakemake官方推荐两种安装方式:conda和pip。我个人习惯用conda,尤其是在做生物信息学项目时,因为conda能帮你把底层Python、R、系统工具链都管起来,不容易出现“装好了却跑不了”的尴尬。

不过话说回来,如果你只是想在临时环境里试试水,或者团队已经统一用pip管理,那pip也没问题。只是一旦遇到依赖冲突,别怪我没提醒你——pip的哭诉指数要比conda高不少。

我的建议:如果你主要做生信质控,直接上miniconda + conda环境。后面教程里要用到FastQC、MultiQC、SRA Toolkit等工具,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。

避坑记录:我曾经在一台只有pip的新服务器上装snakemake,执行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帮你管理了输入输出依赖、并行度、文件更新检查等脏活累活。等后面学到通配符和多样本批量处理时,你会更理解它的威力。

关键理解:Snakemake的工作流就是规则的组合。每条规则定义了输入、输出、要运行的命令。Snakemake根据输出是否缺失或输入是否更新,决定是否要重新运行该规则。这是它区别于普通shell脚本的核心。

本章知识框架

第2章 环境安装与命令行入门 Snakemake 环境安装 Conda安装(推荐) Pip安装(备选) 验证安装 (snakemake --version) 核心命令行参数 -n (干跑) -j (并行数) -p (打印命令) --dag (DAG图) 实战示例:压缩fastq文件 Snakefile → snakemake -n → snakemake -j 1 -p 避坑:环境激活

图里把本章的脉络画得很清楚了:先装环境,再验证,最后熟悉关键命令,用一个小例子收尾。每一步都能踩出实物来。

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跟你问好了,接下来咱们就可以真正开始搭建质控流水线了。