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 | 菌株名 | 空 |
--meta | MAG/宏基因组模式 | 关闭 |
--complete | 完整基因组(影响 rRNA 预测) | 关闭 |
--compliant | INSDC 规范输出 | 关闭 |
--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 short | contig 长度低于阈值 | 降低 --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