跳转至

Bakta — 细菌基因组/MAG 快速标准化注释工具


一句话说明

Bakta 是 Prokka 的现代替代品,提供更规范的数据库、更丰富的 dbxref 交叉引用和 JSON 输出,支持 sORF(短 ORF)注释,适合基因组投稿和 MAG 分析(当前版本 v1.11.4)。


安装与配置

# 创建专用环境
conda create -n bakta python=3.11 -y
conda activate bakta

# 从 bioconda 安装 Bakta(最新稳定版 v1.11.4)
conda install -c bioconda -c conda-forge bakta -y

# 验证安装
bakta --version           # 应显示 1.11.4

# 下载注释数据库(必须步骤,约 30GB)
# --output:数据库下载目录
# --type full:完整数据库(推荐)
bakta_db download \
    --output ~/databases/bakta/ \
    --type full              # 完整数据库(含 sORF 等)
    # --type light          # 轻量版(约 2GB,精度略低)

# 设置数据库路径环境变量(避免每次指定)
export BAKTA_DB=~/databases/bakta/db
echo 'export BAKTA_DB=~/databases/bakta/db' >> ~/.bashrc

核心用法

基础注释运行

# 最简命令:注释单个细菌基因组
# --db:数据库路径(已设环境变量则可省略)
# --output:输出目录
# --prefix:输出文件名前缀
# --threads:线程数
bakta \
    --db ~/databases/bakta/db \
    --output bakta_out/ \
    --prefix mygenome \
    --threads 16 \
    genome.fa                 # 输入基因组 fasta

完整参数注释(推荐细菌分离株使用)

# 指定物种信息提高注释质量
bakta \
    --db ~/databases/bakta/db \
    --output bakta_out/ \
    --prefix ecoli_K12 \
    --genus Escherichia \     # 属名
    --species coli \          # 种名
    --strain K12 \            # 菌株名
    --plasmid pUC19 \         # 质粒名(若注释质粒)
    --compliant \             # 生成符合 INSDC 提交标准的文件
    --threads 16 \
    --verbose \               # 详细输出模式
    ecoli_genome.fa

MAG 注释模式

# MAG 注释:调低质量要求,不强求完整基因组
bakta \
    --db ~/databases/bakta/db \
    --output mag_annot/ \
    --prefix mag_bin01 \
    --meta \                  # 宏基因组/MAG 模式(禁用单环形基因组检查)
    --min-contig-length 500 \ # 最短 contig
    --threads 8 \
    bin_01.fa

参数详解

参数说明默认值
--db数据库路径BAKTA_DB 环境变量
--output输出目录必填
--prefix输出文件前缀必填
--threads线程数1
--genus属名
--species种名
--strain菌株名
--metaMAG/宏基因组模式关闭
--complete完整基因组(影响 rRNA 预测)关闭
--compliantINSDC 规范输出关闭
--min-contig-length最短 contig(bp)1
--locus-tag基因座标签前缀自动生成
--verbose详细日志关闭

输出文件说明

ls bakta_out/
# mygenome.gff3      — GFF3 格式注释(兼容大多数工具)
# mygenome.gbff      — GenBank flat-file 格式(基因组浏览器使用)
# mygenome.fna       — 基因组核苷酸序列
# mygenome.faa       — 蛋白质序列(所有 CDS)
# mygenome.ffn       — 所有特征核苷酸序列
# mygenome.json      — 结构化 JSON 格式(程序化处理最方便)
# mygenome.tsv       — 制表符注释表(类似 Prokka .tsv)
# mygenome.txt       — 纯文本统计摘要
# mygenome.hypotheticals.tsv — 假设蛋白详细信息

# 查看注释统计
cat bakta_out/mygenome.txt

实战案例

# 场景:批量注释多个 MAG,然后汇总统计

mkdir -p bakta_annotations

for bin_fa in das_tool_bins/*.fa; do
    bin_name=$(basename ${bin_fa} .fa)       # 提取文件名(不含扩展名)

    # 注释每个 MAG(MAG 模式)
    bakta \
        --db ~/databases/bakta/db \
        --output bakta_annotations/${bin_name}/ \
        --prefix ${bin_name} \
        --meta \                             # MAG 模式
        --min-contig-length 500 \
        --threads 8 \
        ${bin_fa}

    echo "[完成] ${bin_name}"
done

# 从 tsv 文件汇总各 MAG 的注释统计
echo -e "Bin\tCDS\thypothetical\trRNA\ttRNA" > summary.tsv
for dir in bakta_annotations/*/; do
    name=$(basename ${dir})
    tsv=${dir}/${name}.tsv
    cds=$(awk -F'\t' '$2=="CDS"' ${tsv} | wc -l)           # CDS 总数
    hyp=$(awk -F'\t' '$2=="CDS" && $7~/hypothetical/' ${tsv} | wc -l) # 假设蛋白数
    rrna=$(awk -F'\t' '$2=="rRNA"' ${tsv} | wc -l)          # rRNA 数
    trna=$(awk -F'\t' '$2=="tRNA"' ${tsv} | wc -l)          # tRNA 数
    echo -e "${name}\t${cds}\t${hyp}\t${rrna}\t${trna}" >> summary.tsv
done
cat summary.tsv | column -t                                  # 格式化打印

常见报错与解决

报错信息原因解决方法
Database not found数据库未下载或路径错误重新运行 bakta_db download
pyhmmer error数据库版本不匹配更新 bakta 和数据库到最新版
Contig too shortcontig 长度低于阈值降低 --min-contig-length
RAM error内存不足减少 --threads,释放内存
No CDS predicted序列质量差或格式错误检查 fasta 格式,去除非 ACGT 字符

速查表

# 下载数据库(一次性操作)
bakta_db download --output ~/databases/bakta/ --type full

# 单基因组注释
bakta --db ~/databases/bakta/db --output out/ --prefix sample --threads 16 genome.fa

# MAG 注释
bakta --db ~/databases/bakta/db --output out/ --prefix bin01 --meta --threads 8 bin.fa

# 批量注释
for f in bins/*.fa; do n=$(basename $f .fa); bakta --db ~/db/bakta/db --output annot/$n/ --prefix $n --meta --threads 8 $f; done