第3章:环境准备:Linux/Conda/系统依赖安装、Python环境配置(需Python 3.8+)
做生信分析,环境搭不好,后面全是泪。这话我信了很多年。
Kraken2这个工具虽然用起来不复杂,但它对系统底层依赖有要求,尤其是编译时得把zlib、gcc这些备齐。Python环境也不省心——Python 3.8以上是硬性门槛,还得考虑pandas、numpy这些库的版本兼容性。
嗯,这章我们就一步一步把环境梳理清楚。我会把我在实际项目中踩过的坑直接告诉你,省得你像我当年一样对着报错日志发愣。
3.1 环境准备全景图
先上结构图,你看一眼就知道这章要装什么、怎么装。我个人习惯在动手之前画个流程图,免得漏环节。
3.2 Linux 系统检查
你手头要是台Ubuntu 20.04/22.04或者CentOS 7/8,基本就够用了。Kraken2的编译器和库在主流发行版里都能找到。
先确认下系统版本:
cat /etc/os-release
uname -a
我个人习惯用Ubuntu,包更新快,社区文档全。如果你用CentOS,记得把epel-release源先开一下,不然很多包找不到。
3.3 Conda 安装与配置
Conda是生信环境管理的标配。我建议装Miniconda而不是Anaconda,体积小,够用就行。
下载安装:
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指定路径。装完后重新登录终端或者source ~/.bashrc让conda命令生效。
3.3.1 国内镜像配置(避坑重点)
你想想看,从国外源下载包慢得像蜗牛。我刚开始用Conda时,下载个python=3.8都卡半天,后来换清华镜像直接起飞。
配置方法:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
如果你跑的是新版Conda(23.x+),可能还需要把defaults通道删掉,不然还是会走官方源:
conda config --remove channels defaults # 视情况而定
~/.condarc里加上channel_priority: strict,避免包版本冲突。我曾经因为不设优先级装了个不兼容的numpy,Kraken2的Python wrapper直接崩溃。
3.4 系统依赖安装
Kraken2本身是C++写的,编译需要gcc、g++、make,以及zlib1g-dev(用于压缩基因组数据库)。
3.4.1 Ubuntu/Debian 系
sudo apt update
sudo apt install -y build-essential zlib1g-dev libbz2-dev liblzma-dev
libbz2-dev和liblzma-dev是可选但推荐的,某些数据库索引会用bzip2和lzma压缩。
3.4.2 CentOS/RHEL 系
sudo yum install -y epel-release
sudo yum groupinstall -y "Development Tools"
sudo yum install -y zlib-devel bzip2-devel xz-devel
error: 'to_string' is not a member of 'std',就升级gcc到7.x:sudo yum install -y centos-release-scl && sudo yum install -y devtoolset-7-gcc*,然后scl enable devtoolset-7 bash。
3.5 Python 环境配置
Kraken2的Python wrapper和后续分析脚本(比如kraken-biom、bracken)都要求Python 3.8+。我推荐用Conda在隔离环境里装,不污染系统Python。
3.5.1 创建并激活环境
conda create -n kraken2 python=3.8 -y
conda activate kraken2
你可以把名字改成自己习惯的,比如kraken2_env,无所谓。激活后命令行前面会出现(kraken2)字样。
3.5.2 验证Python版本
python --version
输出应该是Python 3.8.x、3.9.x或3.10.x。3.11理论上也行,但有些旧版库(如pandas 1.3.x)没提供3.11的二进制包,你会被迫从源码编译,很慢。我建议锁定3.8或3.9最稳。
3.5.3 安装基本数据分析包
这些不是Kraken2的直接依赖,但后续做丰度表格和可视化100%要用到:
conda install -y numpy pandas scipy matplotlib seaborn
pip install kraken-biom # 将Kraken2报告转换为BIOM格式
numpy如果用pip裸装,可能在老旧glibc上报Illegal instruction错误。我吃过这个亏,后来强制先conda后pip就没再出过问题。
3.6 环境验证清单
全部装完后,建议跑一遍快速检查,确保每个环节都通了。我习惯写个小脚本一次性验证:
#!/bin/bash
# env_check.sh - 快速验证Kraken2环境
echo "=== 系统依赖 ==="
gcc --version | head -n1
zlib_ver=$(ldconfig -p | grep libz | head -n1)
echo "zlib found: $zlib_ver"
echo "=== Conda ==="
conda --version
echo "=== Python ==="
python -c "import sys; print(f'Python {sys.version_info.major}.{sys.version_info.minor}')"
python -c "import numpy; print('numpy:', numpy.__version__)"
python -c "import pandas; print('pandas:', pandas.__version__)"
echo "=== Kraken2 (如果已安装) ==="
which kraken2 && kraken2 --version || echo "Kraken2 尚未安装"
把上面内容保存为env_check.sh,然后bash env_check.sh。如果每行都输出正常版本号,说明环境万事俱备。
3.7 常见问题与修复
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| conda: command not found | conda未添加到PATH | 执行 source ~/miniconda3/etc/profile.d/conda.sh 或重新登录 |
| gcc: fatal error: zlib.h: No such file or directory | zlib开发包未安装 | 安装 zlib1g-dev (Ubuntu) 或 zlib-devel (CentOS) |
| ImportError: libstdc++.so.6: version `GLIBCXX_3.4.30' not found | Conda环境内libstdc++版本过低 | 运行 conda install -c conda-forge libstdcxx-ng 升级 |
| pip安装后提示“Illegal instruction” | pip包编译时使用了不支持CPU指令集 | 改用conda安装,或者指定环境变量 export CONDA_CPU_FEATURES_OPT_LEVEL=-O2 |
PATH残留了系统Python路径,导致python命令指向了2.7,Kraken2报表脚本全挂。
好了,到这步环境就准备好了。Linux系统有了,Conda配好了镜像,系统依赖一个不落,Python 3.8隔离环境也创建完毕。下一步我们就可以正式开始装Kraken2本体——你只用专心输入命令,剩下的编译和数据库下载我会帮你安排好。