环境搭建:安装 Kraken2 与依赖
说实话,环境搭建这事看起来简单,但坑不少。我去年帮一个团队部署 Kraken2,就因为在依赖版本上踩了雷,折腾了大半天。这一节咱们就把 Miniconda 和手动编译的细节捋清楚,你跟着走,基本不会出问题。
为什么先装 Miniconda?
很多人喜欢用系统自带的 Python 环境。但我个人习惯,任何生物信息项目都先上 Miniconda。原因很简单——隔离性好,依赖可控。Kraken2 虽然是个 C++ 程序,但它依赖的 zlib、bzip2 这些库,版本一变可能就编译不过。用 Conda 虚拟环境,可以把这些库锁死在某个版本,不影响系统其他软件。
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++ 输出。
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 指定路径。
安装流程图
下面这张图概括了整个安装决策流程:
这张图理清了两种途径:一条是 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 分钟,但能帮你省掉后面排查环境问题的无数时间。