MetaPhlAn 与 StrainPhlAn 数据库关系详解(中文)
简短回答:它们有关联,但不完全相同。两者都基于同一套 “标记基因 (marker genes)” 理念,但用途、文件结构和下载内容是分开的。
🔹 核心区别对比
| 特性 | MetaPhlAn | StrainPhlAn |
|---|---|---|
| 主要用途 | 物种/菌种水平的分类组成分析(谁在那儿?丰度多少?) | 同一物种内不同菌株水平的进化/变异分析(是同一个菌株吗?有没有突变?) |
| 核心数据库 | mpa_vJan25_CHOCOPhlAnSGB_202503_bt2/(Bowtie2 索引 + 标记基因列表) |
strainphlan_db_markers/(标记基因 FASTA)+ strainphlan_db_reference/(参考基因组,可选) |
| 文件大小 | ~16 GB(Bowtie2 索引解压后) | 标记基因 ~50–200 MB;参考基因组需用户自行提供或额外下载 |
| 是否自动下载 | ✅ metaphlan --install 会自动下载完整数据库 |
⚠️ 标记基因可能随 MetaPhlAn 一起下载,但参考基因组通常为空,需手动配置 |
| 依赖关系 | 独立运行 | 通常依赖 MetaPhlAn 先鉴定出目标物种,再对该物种做菌株分析 |
🔹 目录结构说明(以你的路径为例)
# MetaPhlAn 主数据库(必需)
${DB_DIR}/
├── mpa_vJan25_CHOCOPhlAnSGB_202503_bt2/ # Bowtie2 索引文件(.bt2),用于快速比对
├── mpa_vJan25_CHOCOPhlAnSGB_202503_bt2.tar # 压缩包
├── mpa_vJan25_CHOCOPhlAnSGB_202503_bt2.md5 # 校验文件
└── markers/ # 标记基因定义文件(.mpa)
# StrainPhlAn 专用目录(可选/扩展)
├── strainphlan_db_markers/
│ └── all_markers.fasta # 所有物种的标记基因序列(用于提取目标物种的标记)
└── strainphlan_db_reference/
└── [空或用户自定义] # 存放特定物种的参考基因组集合,用于构建系统发育树
💡 你看到
strainphlan_db_reference/通常是空的,因为:
- StrainPhlAn 默认使用 MetaPhlAn 鉴定出的物种 + 内置标记基因进行分析;
- 只有当你想做高精度菌株追踪(比如比较多个样本中 E. coli 的 SNP 差异)时,才需要手动下载或提供该物种的参考基因组集合。
🔹 它们如何协作?(工作流程)
graph LR
A[原始 FASTQ] --> B(MetaPhlAn)
B --> C{物种组成表}
C -->|目标物种: e.g. Escherichia coli | D[StrainPhlAn]
D --> E[提取该物种的标记基因]
E --> F[多序列比对 + 构建系统发育树]
F --> G[菌株水平差异/传播分析]
🔹 实用建议(针对你的测试环境)
-
当前测试阶段:你用了
--bypass-strain-profiling,所以 StrainPhlAn 完全不会运行,只需确保 MetaPhlAn 数据库完整即可。 -
未来启用菌株分析时:
# 1. 先确认标记基因是否存在 ls -lh ${DB_DIR}/strainphlan_db_markers/all_markers.fasta # 2. 如果缺失,可尝试重新安装(部分版本会一起下载) metaphlan --install --bowtie2db ${DB_DIR} # 3. 如需参考基因组(高级用法),手动下载并放入 reference 目录 # 例如从 GTDB 或 NCBI 下载目标物种的 .fna 文件 -
数据库路径统一管理(避免重复下载):
# 在 ~/.bashrc 或 conda env 中设置 export METAPHLAN_DB_PATH=/mnt/nvme4n1p1/biobakery_db/metaphlan_dbs export STRAINPHLAN_DB_PATH=/mnt/nvme4n1p1/biobakery_db/strainphlan_dbs
🔹 常见问题排查
# 检查 MetaPhlAn 数据库是否完整
metaphlan --help # 如果能看到版本信息,说明基础环境正常
# 手动验证 MD5(你之前报错的关键)
cd ${DB_DIR}
md5sum -c mpa_vJan25_CHOCOPhlAnSGB_202503_bt2.md5
# 正确输出应为: mpa_vJan25_CHOCOPhlAnSGB_202503_bt2.tar: OK
# 如果 StrainPhlAn 报错找不到标记基因
strainphlan --print-default-db # 查看默认数据库路径
# 然后通过 --marker_db 和 --reference_db 参数指定自定义路径
✅ 总结:
MetaPhlAn 是 “普查”(查有哪些菌),StrainPhlAn 是 “精查”(查同一个菌的不同菌株)。
它们共享底层标记基因理念,但数据库文件、用途和运行逻辑是分层独立的。
你当前测试只需关注 MetaPhlAn 数据库修复即可,StrainPhlAn 可后续按需启用。
如果修复 MD5 问题后还有报错,欢迎继续贴日志,我帮你逐行分析!🔍🚀
如何获取 strainphlan_db_markers/all_markers.fasta?
关键结论:这个文件不是直接下载的,而是通过 bowtie2-inspect 工具从 MetaPhlAn 的 Bowtie2 索引文件本地生成的。[[41]]
🔹 原理说明
all_markers.fasta 包含数据库中的所有标记基因序列,StrainPhlAn 用它来提取目标物种的标记。[[28]]
生成逻辑(来自官方源码 biobakery_workflows_databases.py):[[41]]
# 1. 找到 MetaPhlAn 数据库目录
strainphlan_db_folder = os.path.join(os.path.dirname(metaphlan.__file__), "metaphlan_databases")
strainphlan_db = glob.glob(strainphlan_db_folder+"/mpa_*.pkl")[0].replace(".pkl", "")
# 2. 用 bowtie2-inspect 提取 FASTA
run_command("bowtie2-inspect " + strainphlan_db + " > " + install_folder + "/all_markers.fasta", shell=True)
🔹 方法一:使用官方命令自动生成(推荐)
# 1. 确保 MetaPhlAn 数据库已正确安装(先修复你之前的 MD5 问题)
metaphlan --install --bowtie2db /home/jhuang/mambaforge/envs/biobakery_run/lib/python3.10/site-packages/metaphlan/metaphlan_databases
# 2. 运行 biobakery_workflows 的数据库安装命令,自动创建 all_markers.fasta
biobakery_workflows_databases --install wmgx --location /mnt/nvme4n1p1/biobakery_db
✅ 执行后,会在指定 location 下自动生成:
/mnt/nvme4n1p1/biobakery_db/
├── strainphlan_db_markers/
│ └── all_markers.fasta # ← 自动生成,约 50–200 MB
└── strainphlan_db_reference/
└── (空目录,用于自定义参考基因组)
🔹 方法二:手动用 bowtie2-inspect 生成(高级用户)
如果你已确认 MetaPhlAn 数据库完整,可手动执行:
# 1. 找到你的 MetaPhlAn Bowtie2 索引前缀(不含 .bt2 后缀)
# 通常在:~/.conda/envs/biobakery_run/lib/python3.10/site-packages/metaphlan/metaphlan_databases/
DB_PREFIX="/home/jhuang/mambaforge/envs/biobakery_run/lib/python3.10/site-packages/metaphlan/metaphlan_databases/mpa_vJan25_CHOCOPhlAnSGB_202503_bt2"
# 2. 创建输出目录
mkdir -p /mnt/nvme4n1p1/biobakery_db/strainphlan_db_markers
# 3. 用 bowtie2-inspect 提取 FASTA
bowtie2-inspect "$DB_PREFIX" > /mnt/nvme4n1p1/biobakery_db/strainphlan_db_markers/all_markers.fasta
# 4. 验证生成结果
ls -lh /mnt/nvme4n1p1/biobakery_db/strainphlan_db_markers/all_markers.fasta
head -n 4 /mnt/nvme4n1p1/biobakery_db/strainphlan_db_markers/all_markers.fasta
💡
bowtie2-inspect是 Bowtie2 自带工具,安装bowtie2后自动可用。
🔹 验证数据库是否完整
# 检查 MetaPhlAn 能否正常调用数据库
metaphlan --print-default-db
# 检查 all_markers.fasta 是否存在且非空
test -s /mnt/nvme4n1p1/biobakery_db/strainphlan_db_markers/all_markers.fasta && echo "✅ all_markers.fasta OK" || echo "❌ 文件缺失或为空"
# (可选)快速统计标记基因数量
grep -c "^>" /mnt/nvme4n1p1/biobakery_db/strainphlan_db_markers/all_markers.fasta
# 预期输出:数万条(取决于数据库版本)
🔹 常见问题排查
| 问题 | 解决方案 |
|---|---|
bowtie2-inspect: command not found |
conda install -c bioconda bowtie2 |
Unable to find strainphlan install |
确保 metaphlan 已正确安装且 $PYTHONPATH 包含其路径 |
生成的 all_markers.fasta 为空 |
检查 $DB_PREFIX 是否正确,应指向 .bt2 索引的公共前缀(不含 .1.bt2 等后缀) |
| 磁盘空间不足 | Bowtie2 索引解压后约 16 GB,确保目标分区有 ≥20 GB 空闲 |
🔹 当前测试建议
你当前运行 biobakery_workflows 时使用了 --bypass-strain-profiling,StrainPhlAn 完全不会执行,因此 all_markers.fasta 缺失不会影响你的测试流程。✅
🎯 优先修复 MetaPhlAn 数据库的 MD5 问题(删除损坏的
.tar+.md5文件后重跑),等流程测试通过后再按需生成 StrainPhlAn 数据库。
如需我帮你写一个一键修复 + 生成数据库的脚本,请告诉我!🚀