环境搭建:安装 Kraken2 与依赖

说实话,环境搭建这事看起来简单,但坑不少。我去年帮一个团队部署 Kraken2,就因为在依赖版本上踩了雷,折腾了大半天。这一节咱们就把 Miniconda 和手动编译的细节捋清楚,你跟着走,基本不会出问题。

为什么先装 Miniconda?

很多人喜欢用系统自带的 Python 环境。但我个人习惯,任何生物信息项目都先上 Miniconda。原因很简单——隔离性好,依赖可控。Kraken2 虽然是个 C++ 程序,但它依赖的 zlib、bzip2 这些库,版本一变可能就编译不过。用 Conda 虚拟环境,可以把这些库锁死在某个版本,不影响系统其他软件。

提示:如果你已经装了 Anaconda,也可以用。但 Anaconda 包太多,轻量级项目建议用 Miniconda,省空间。

Step 1:安装 Miniconda

去官网下载对应你系统的安装脚本,或者直接用 wget 拉下来。我一般用下面这套命令:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3
~/miniconda3/bin/conda init

-b 表示静默安装,-p 指定路径。装完之后最好重新登录一次 shell,或者 source ~/.bashrc 加载 conda。

你检查一下:

conda --version

能看到版本号就搞定。

Step 2:创建专用虚拟环境

我不推荐直接在 base 环境里装东西,容易把环境搞乱。创建一个专门给 Kraken2 用的环境:

conda create -n kraken2_env -c bioconda kraken2=2.1.3

等等,这里有个坑。Kraken2 的 bioconda 包依赖某些旧版本的库,而 bioconda 源有时候会跟默认的 conda-forge 冲突。我曾经遇到过一个情况:装完后运行 kraken2-build,报 libstdc++.so.6: version `GLIBCXX_3.4.30' not found。说白了就是系统 gcc 版本太老。解决办法后面说。

Step 3:手动编译 Kraken2(推荐核心用户)

图方便用 bioconda 包没问题。但我建议你试试手动编译——能深入理解底层,也方便后续调优。Kraken2 的编译依赖很简单:

  • C++ 编译器(g++ 或 clang++)
  • zlib 开发头文件
  • bzip2 开发头文件
  • (可选)Intel Threading Building Blocks (TBB) 用于并行加速

在 Ubuntu/Debian 上装这些:

sudo apt update
sudo apt install build-essential zlib1g-dev libbz2-dev libtbb-dev

然后下载源码并编译:

git clone https://github.com/DerrickWood/kraken2.git
cd kraken2
./install_kraken2.sh ~/kraken2_bin

install_kraken2.sh 脚本会自动检测依赖、编译,并把可执行文件放到 ~/kraken2_bin。编译过程大概一两分钟,你会看到一堆 g++ 输出。

注意:如果你在 CentOS 或 RHEL 上编译,记得先装 EPEL 源,否则找不到 libtbb-devel。我当年在公司老旧服务器上踩过这坑,装完 EPEL 后就一路绿灯。

Step 4:验证安装

不管你是用 conda 装还是手动编译,装完后跑一下版本检查:

kraken2 --version
kraken2-build --version

如果显示版本号(比如 2.1.3),基本没问题。然后我习惯用一个小测试数据库快速验证功能:

kraken2-build --standard --db test_db
kraken2 --db test_db ~/some_fasta_file.fa

注意:--standard 会下载完整的标准库,很大(约 80GB)。如果你只是想测试,可以用 kraken2-build --download-taxonomy --db test_db 只下载分类树,然后自己丢几个序列进去看看。我一般用快速测试模式:

kraken2 --db test_db --quick --report quick_report.txt test_sequences.fa

能正常输出报告,就算环境搭好了。

核心依赖关系一览

为了让你看得更清楚,我把依赖关系整理成表格:

组件 版本要求(最低) 备注
g++ / clang++ C++14 支持 gcc 5.0+ 或 clang 3.4+
zlib 1.2.8 绝大多数系统都预装了
bzip2 1.0.6 同上,但头文件可能需要单独装
TBB (可选) 2020.1 不装也能用,就是单线程慢点
Perl 5.x kraken2-build 脚本依赖
重点:如果你手动编译遇到 cannot find -lz 或 cannot find -lbz2,不要慌。八成是开发头文件没装。apt install 一下就好,实在不行用 export LDFLAGS=-L/usr/local/lib 指定路径。

安装流程图

下面这张图概括了整个安装决策流程:

Kraken2 环境搭建决策流 开始环境搭建 安装 Miniconda 创建虚拟环境 或者手动编译(推荐) git clone + 编译脚本 conda install kraken2 运行 kraken2 --version 建库 / 测试 推荐:手动编译更灵活

这张图理清了两种途径:一条是 conda 安装(快但依赖受限),另一条是手动编译(可控性强,适合生产环境)。我个人一直推荐手动编译,尤其当你需要开启多线程或对接自定义数据库时。

一些常见的坑和我的经验

  • conda 源慢? 换成国内镜像:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda。我当年在学校内网,国外源慢得离谱,换成清华源后速度飚到 10 MB/s。
  • 编译时报错找不到头文件? 检查 /usr/include 下有没有 zlib.h 和 bzlib.h。我在 Ubuntu 上遇到过系统预装 zlib 但没装 zlib1g-dev,导致头文件缺失。一个 apt install zlib1g-dev 搞定。
  • 装完 TBB 但编译时不识别? 用 export CXXFLAGS="-I/path/to/tbb/include -L/path/to/tbb/lib" 暴力指定。
  • kraken2-build 下载库卡死? 它的默认服务器放在 NCBI,有时候会断流。可以用 rsync 或 wget 手动下载,然后放到 ~/kraken2_db/minikraken2_v2/ 目录下。我踩过这个坑,后来写了个自动重试脚本才解决。
  • 交叉编译场景? 如果你在 Mac 上编译要给 Linux 用,记得用 make CXX=x86_64-linux-gnu-g++。但说实话,生物信息领域很少这么做,老老实实在目标机器上编译最稳。

一句话总结:先装 Miniconda,创建独立环境;然后手动编译 Kraken2,最后用快速模式验证。这个过程不超过 10 分钟,但能帮你省掉后面排查环境问题的无数时间。