Hello,Hello小伙伴们大家好,近年来,随着宏基因组学、微生物组学以及病毒组学研究的快速发展,如何快速、准确地对大规模蛋白质序列进行功能注释,也逐渐成为生物信息学分析中的重要环节。今天给大家介绍一款由 Josh L. Espinoza 开发的高效蛋白质功能注释工具——PyKofamSearch。
PyKofamSearch 是一款面向大规模蛋白质功能注释的高性能工具,核心功能是基于 KOfam 数据库对蛋白质序列进行 KEGG Ortholog(KO)分配。该工具利用 PyHMMER 实现高效的 profile Hidden Markov Model(HMM)搜索,并结合 KOfam 为不同 KO 模型设定的特异性评分阈值,对蛋白质序列进行功能匹配与 KO 注释。PyKofamSearch 支持普通和 gzip 压缩的 FASTA 文件输入,并针对高内存、多线程计算环境以及大规模蛋白质数据集进行了优化,同时支持灵活的数据库加载方式,可通过预先整理和序列化数据库模型进一步提升数据库读取和分析效率,适用于宏基因组、微生物基因组和病毒组等大规模蛋白质数据的快速功能注释。
传统 KofamScan 基于 KOfam 数据库中的 profile HMM 模型及 KO 特异性阈值进行功能注释,在蛋白质 KO 分配中应用广泛。然而,随着宏基因组和病毒组等研究中蛋白质数据规模不断扩大,传统分析流程在处理大规模数据时可能面临计算耗时增加以及磁盘读写开销较大等问题。针对这些问题,PyKofamSearch 基于 PyHMMER 对 HMM 搜索过程进行了高效实现,并针对高内存、多线程计算环境进行了优化,同时通过减少中间文件的生成、降低磁盘 I/O 开销,从而提升大规模蛋白质数据的 KO 注释效率。尤其是在需要对数十万甚至更多蛋白质序列进行批量功能注释时,PyKofamSearch 为 KOfam 功能注释提供了一种更加高效、便捷的实现方式。
工作流程

PyKofamSearch是一款基于 KOfam 数据库和 PyHMMER 的高性能蛋白质功能注释工具,可快速完成大规模蛋白质序列的 KEGG Ortholog(KO)分配。其特点包括多线程加速、减少磁盘 I/O、支持多种数据库加载方式以及结构化结果输出,适用于宏基因组、微生物基因组和病毒组等大规模蛋白质数据的功能注释与 KEGG 通路分析。
Github:
https://github.com/jolespin/pykofamsearch
数据库:
https://www.genome.jp/ftp/db/kofam
软件安装
# 创建一个名为PyKofamSearch的conda环境,并安装pykofamsearch
conda create -n PyKofamSearch -c conda-forge -c bioconda pykofamsearch
# conda install 直接安装
conda install -c bioconda pykofamsearch
# pip install 安装
pip install pykofamsearch
# 激活环境
conda activate PyKofamSearch 安装说明:
小编的安装更推荐第一种方法,因为小编习惯将每个软件单独创建一个虚拟conda环境,避免软件依赖产生冲突。
配置数据库
## 下载数据库
# 在线模式
serialize_kofam_models -o db/KEGG
# 离线模式
mkdir -p db/KEGG && cd db/KEGG
# 使用wget下kofam数据库Hmm文件和ko注释文件
wget -c -nv -a download.log -b https://www.genome.jp/ftp/db/kofam/profiles.tar.gz
wget -c -nv -a download.log -b https://www.genome.jp/ftp/db/kofam/ko_list.gz
# 解压数据库
gzip -d ko_list.gz
tar -xvzf profiles.tar.gz
# 格式化数据库
serialize_kofam_models -d profiles -k ko_list.tsv -b KofamSearch.pkl.gz注:
数据库预处理,ko_list中的有些ko没有,Hmm文件,故需要从ko_list文件中移除没有Hmm文件的ko,否则每次运行程序,会发现警告信息,我小编将移除后的文件命名为ko_list.tsv
使用方法
pykofamsearch -h
usage: pykofamsearch -i <proteins.fasta> -o <output.tsv> -d
Running: pykofamsearch v2025.9.5 via Python v3.12.13 | /path/softwara/miniforge3/envs/PyKofamSearch/bin/python3.12
options:
-h, --help show this help message and exit
--verbosity VERBOSITY
Verbosity of missing KOfams [Default: 1]
-v, --version show program's version number and exit
I/O arguments:
-i PROTEINS, --proteins PROTEINS
path/to/proteins.fasta. stdin does not stream and loads everything into memory. [Default: stdin]
-o OUTPUT, --output OUTPUT
path/to/output.tsv [Default: stdout]
-s SUBSET, --subset SUBSET
path/to/identifiers.list where HMM identifiers are on a separate line used to subset the database. Only HMMs in the subset will be used.
--no_header No header
Utility arguments:
-p N_JOBS, --n_jobs N_JOBS
Number of threads to use [Default: 1]
HMMSearch arguments:
-e EVALUE, --evalue EVALUE
E-value threshold [Default: 0.1]
-a, --all_hits Return all hits and do not use curated threshold. Not recommended for large queries.
-t THRESHOLD_SCALE, --threshold_scale THRESHOLD_SCALE
Multiplier for the curated thresholds. Higher values will make the annotation more strict [Default: 1.0]
Database arguments:
-d DATABASE_DIRECTORY, --database_directory DATABASE_DIRECTORY
path/to/kofam_database_directory/ cannot be used with -b/-serialized_database
-b SERIALIZED_DATABASE, --serialized_database SERIALIZED_DATABASE
path/to/database.pkl cannot be used with -d/--database_directory
PyKOfamSearch重要参数解释:
参数 | 说明 |
|---|---|
-h, --help | 显示帮助信息并退出 |
--verbosity VERBOSITY | 设置缺失 KOfam 信息的输出详细程度,默认值为 1 |
-v, --version | 显示 PyKofamSearch 版本信息并退出 |
-i PROTEINS, --proteins PROTEINS | 指定输入蛋白质序列文件,格式为 FASTA;也可从标准输入读取,但会将全部数据加载到内存中 |
-o OUTPUT, --output OUTPUT | 指定输出结果文件路径,输出格式为 TSV;默认输出到标准输出 |
-s SUBSET, --subset SUBSET | 指定 HMM/KOfam 标识符列表文件,每行一个标识符,仅使用列表中的模型进行搜索 |
--no_header | 输出结果时不包含表头 |
-p N_JOBS, --n_jobs N_JOBS | 设置并行计算使用的线程数,默认值为 1 |
-e EVALUE, --evalue EVALUE | 设置 HMMSearch 的 E-value 阈值,默认值为 0.1 |
-a, --all_hits | 返回所有命中结果,不使用 KOfam 预设的 curated threshold 进行筛选;不推荐用于大规模蛋白质查询 |
-t THRESHOLD_SCALE, --threshold_scale THRESHOLD_SCALE | 设置 KOfam curated threshold 的缩放倍数;数值越大,注释筛选越严格,默认值为 1.0 |
-d DATABASE_DIRECTORY, --database_directory DATABASE_DIRECTORY | 指定 KOfam 数据库目录路径,用于直接读取官方 KOfam 数据库;不能与 -b/--serialized_database 同时使用 |
-b SERIALIZED_DATABASE, --serialized_database SERIALIZED_DATABASE | 指定预先序列化的 KOfam 数据库文件,如 .pkl 或 .pkl.gz;不能与 -d/--database_directory 同时使用 |
说明:
-d 和 -b 都用于指定 KOfam 数据库,但二者的数据库加载方式不同。-d 用于直接指定官方 KOfam 数据库目录,适合直接使用下载后的原始数据库文件;-b 用于指定预先序列化的数据库文件,可减少重复读取和解析大量 HMM 模型的开销,更适合大规模蛋白质注释任务。-d 和 -b 不能同时使用,只能二选一。
实战演练
# 示例蛋白序列:https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_protein.faa.gz
# 去除序列ID后的注释信息
seqkit replace -p '\s.*' -r '' GCF_000005845.2_ASM584v2_protein.faa.gz -w 0 > ASM584v2_protein.faa
# 使用默认参数对蛋白进行注释, 默认依据 KOfam 数据库为各 KO 模型设定的 curated threshold 对命中结果进行筛选,仅保留 score 达到或超过对应 threshold 的显著注释结果。
pykofamsearch -i ASM584v2_protein.faa -b ./db/KEGG/PyKofamSearch.pkl.gz -o ASM584v2_kegg.tsv -p 16
# 使用 -a 参数返回所有满足 E-value 阈值的 HMM 命中结果将返回所有满足 E-value 阈值的 HMM 命中结果,不再依据 KOfam curated threshold 对结果进行筛选,因此输出中会同时包含 score 高于和低于对应 threshold 的命中结果。
pykofamsearch -i ASM584v2_protein.faa -b ./db/KEGG/PyKofamSearch.pkl.gz -o ASM584v2_kegg.tsv -p 16 -a
# 使用 -a 参数返回所有满足 E-value 阈值的 HMM 命中结果,并通过 -e 0.001 将 E-value 阈值设为 0.001,即保留 E-value ≤ 0.001 的命中结果,不再依据 KOfam curated threshold 进行筛选。
pykofamsearch -i ASM584v2_protein.faa -b ./db/KEGG/PyKofamSearch.pkl.gz -o ASM584v2_kegg.tsv -p 16 -a -e 0.001说明:pykofamsearch还有其他参数及其自己熬嗯,本文仅介绍其中较常用的核心使用方法,起到抛砖引玉的作用。其他命令和参数,读者可结合官方文档、AI 辅助及实际项目需求灵活使用。
结果解读
# 查看结果
csvtk pretty -t ASM584v2_kegg.tsv | head 
列名 | 含义 | 结果解读 |
|---|---|---|
id_protein | 输入蛋白序列 ID | 如 NP_418380.4 |
id_ko | 注释得到的 KEGG Orthology 编号 | 如 K00005,可进一步对应 KEGG 中的基因功能、酶和代谢通路 |
threshold | 该 KOfam profile 的人工校准得分阈值 | 用于判断该蛋白是否达到该 KO 的可信注释标准 |
score | 蛋白序列与对应 KOfam HMM 模型比对得到的 bit score | 通常 score ≥ threshold 时,可认为通过该 KO 的 curated threshold |
e-value | HMM 比对的 E-value | 数值越小,说明随机出现该匹配的可能性越低,比对越显著 |
definition | KO 对应的功能定义 | 给出蛋白/酶的具体功能名称以及可能的 EC 编号 |
enzyme_commission | EC 酶学委员会编号 | 表示该 KO 对应的酶催化功能;非酶蛋白可能为空 |
参考文献