1. Nextflow 简介与安装

1.1 什么是 Nextflow

说白了,Nextflow 就是一个能让你的分析管道跑得更聪明、更省心的工具。我自己干了好几年生信,最怕的就是别人甩过来一个「能跑就行」的 Shell 脚本——几十个 for 循环嵌套,中间崩了得从头再来,换个集群环境就报错。那时候我就在想,能不能有个东西帮我把流程里的脏活累活都管起来?Nextflow 就是我要的答案。

它的核心思路很简单:你写一个 DSL 脚本定义流程,它来帮你管调度、管重跑、管环境。不用担心资源浪费,也不需要操心任务挂了怎么办。

一句话总结:Nextflow = 流程定义语言 + 自动化的计算工作流引擎。

1.2 为什么选择 Nextflow

我刚开始接触时,也犹豫过要不要用其他方案。但真正用起来后,发现有几个点确实绕不开:

  • 可移植性:我写一个流程,能在笔记本上调试,直接扔到 HPC 集群或 AWS 上跑,不用改代码。
  • 并行化:它自带自动并行,不需要我手写 job 数组。
  • 可重现:配合容器(Docker/Singularity),环境隔离,别人拿过去也能跑出一样的结果。
  • 模块化:流程拆成小模块,复用起来特别方便。
  • 断点续跑:这一点我特别看重——任务失败后,只需要修复问题,改一下参数就能接着跑,不用从头再来。
特性 传统 Shell 脚本 Nextflow
并行管理 手动 job 数组 自动并行
环境依赖 模块加载 容器 / Conda
失败重跑 重新跑整个流程 仅重跑失败步骤
可移植性 需适配集群 一次编写,到处运行
代码复用 复制粘贴 模块导入

1.3 安装步骤

Nextflow 的安装方式有好几种,我一般根据场景选。下面是我常用的三种,分别是 Conda、pip 和 Singularity。嗯,这里要注意,不同方式适合不同场景,别弄混了。

1.3.1 通过 Conda 安装

Conda 是我个人最推荐的方式,尤其在团队协作时。环境隔离得干净,不会污染系统 Python。

conda create -n nextflow_env -c bioconda nextflow
conda activate nextflow_env

安装完验证一下:

nextflow -version

小提示:建议在 conda 环境里同时装好 Java,因为 Nextflow 本身是 Java 写的。如果 conda 没自动拉 Java,可以手动装一个:conda install -c conda-forge openjdk。

1.3.2 通过 pip 安装

如果你已经用 pip 管理 Python 环境,那也可以用 pip 装。不过我有次踩过坑——pip 安装的版本可能不是最新的。

pip install nextflow

验证:

nextflow -version

注意:pip 安装的 Nextflow 本质是个 wrapper,底层还是得靠 Java。万一报 Java 找不到,先检查 java -version 有没有输出。

1.3.3 通过 Singularity 安装

Singularity 的方式适合 HPC 用户。我们这边集群不让跑 Docker,但 Singularity 完全没问题。直接拉一个官方镜像,所有依赖一步到位。

singularity pull docker://nextflow/nextflow:latest

然后运行:

./nextflow_latest.sif -version

不过我第一次用的时候愣是没找到怎么传参数……其实只要在镜像名后直接加参数就行,不用指定什么入口。

避坑指南:我曾经在 HPC 上用 pip 装完后,发现 nextflow 命令在登录节点和计算节点行为不一样。后来统一用 Singularity 镜像就再没出过问题。

1.4 快速验证安装

装完别急着跑复杂的流程,先跑个 hello-world 确认一切正常。

新建一个文件 hello.nf:

#!/usr/bin/env nextflow

process sayHello {
    exec """
        echo 'Hello, Nextflow!'
    """
}

workflow {
    sayHello()
}

然后用命令行运行:

nextflow run hello.nf

正常你会看到类似这样的输出:

N E X T F L O W  ~  version 24.04.2
Launching `hello.nf` [distinguished_hodgkin] DSL2 - revision: xxx
executor >  local (1)
[6e/abc123] process > sayHello [100%] 1 of 1 ✔
Hello, Nextflow!

能见到这行 Hello, Nextflow!,就说明安装成功了。

小技巧:nextflow info 可以看当前进程的详细状态,调试的时候很管用。

本章知识结构

下图展示了本章的核心知识点和它们之间的关系。从 Nextflow 的基本概念出发,延伸到为什么选它、怎么安装,最后落到快速验证这条线上。你可以在脑子里过一遍这个图,这样整个流程就串起来了。

第1章 知识结构图 Nextflow 是什么 为什么选择它 安装方法 DSL 脚本 任务调度 可移植 并行化 可重现 模块化 Conda pip Singularity 快速验证安装 💡 说明 从概念到安装再到验证, 一步步带你入门。