Daily Archives: 2026年6月2日

MetaPhlAn 与 StrainPhlAn 数据库关系详解(中文)

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/ 通常是空的,因为:

  1. StrainPhlAn 默认使用 MetaPhlAn 鉴定出的物种 + 内置标记基因进行分析;
  2. 只有当你想做高精度菌株追踪(比如比较多个样本中 E. coli 的 SNP 差异)时,才需要手动下载或提供该物种的参考基因组集合。

🔹 它们如何协作?(工作流程)

graph LR
    A[原始 FASTQ] --> B(MetaPhlAn)
    B --> C{物种组成表}
    C -->|目标物种: e.g. Escherichia coli | D[StrainPhlAn]
    D --> E[提取该物种的标记基因]
    E --> F[多序列比对 + 构建系统发育树]
    F --> G[菌株水平差异/传播分析]

🔹 实用建议(针对你的测试环境)

  1. 当前测试阶段:你用了 --bypass-strain-profiling,所以 StrainPhlAn 完全不会运行,只需确保 MetaPhlAn 数据库完整即可

  2. 未来启用菌株分析时

    # 1. 先确认标记基因是否存在
    ls -lh ${DB_DIR}/strainphlan_db_markers/all_markers.fasta
    
    # 2. 如果缺失,可尝试重新安装(部分版本会一起下载)
    metaphlan --install --bowtie2db ${DB_DIR}
    
    # 3. 如需参考基因组(高级用法),手动下载并放入 reference 目录
    #    例如从 GTDB 或 NCBI 下载目标物种的 .fna 文件
  3. 数据库路径统一管理(避免重复下载):

    # 在 ~/.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-profilingStrainPhlAn 完全不会执行,因此 all_markers.fasta 缺失不会影响你的测试流程。✅

🎯 优先修复 MetaPhlAn 数据库的 MD5 问题(删除损坏的 .tar + .md5 文件后重跑),等流程测试通过后再按需生成 StrainPhlAn 数据库。

如需我帮你写一个一键修复 + 生成数据库的脚本,请告诉我!🚀