bioservices
用于 40+ 个生物信息学服务的统一 Python 接口。在单个工作流程中查询多个数据库(UniProt、KEGG、ChEMBL、Reactome)时使用,并提供一致的 API。最适合跨数据库分析、以及在各服务之间进行 ID 映射。若要进行快速的单数据库查询,请使用 gget;若要进行序列/文件处理,请使用 biopython。
BioServices - 生物信息学数据库统一查询接口
技能概述
BioServices 是一个 Python 包,提供统一接口访问 40+ 生物信息学 Web 服务和数据库,包括 UniProt、KEGG、ChEMBL、PDB 等。适合需要在单个工作流程中查询多个数据库、进行跨数据库分析和标识符映射的场景。支持 Python 3.9–3.12,使用 GPLv3 许可证。
适用场景
1. 跨数据库生物信息学分析
当需要从多个生物数据库整合数据时,BioServices 提供一致的 API 接口,避免学习不同数据库的查询方式。典型场景包括:从 UniProt 获取蛋白质序列,通过 KEGG 查找相关代谢通路,在 ChEMBL 中搜索化合物信息,最后整合分析结果。
2. 生物数据库标识符映射
转换不同数据库之间的标识符,如 UniProtKB ↔ KEGG、UniProtKB ↔ Ensembl、化合物 KEGG ID ↔ ChEMBL。支持批量转换,适合需要整合多个数据来源的分析工作流。
3. 蛋白质与通路分析
- 蛋白质信息检索:从 UniProt 获取序列、注释、结构
- 代谢通路分析:通过 KEGG pathway 发现基因参与的通路
- 序列相似性搜索:运行 BLAST、MUSCLE 等序列比对工具
- 蛋白质相互作用:通过 PSICQUIC 查询蛋白质互作网络
核心功能
1. 统一的数据库访问接口
支持 40+ 生物信息学数据库,包括:
- 蛋白质数据库:UniProt、PDB、Pfam
- 通路数据库:KEGG、Reactome
- 化合物数据库:ChEBI、ChEMBL、PubChem
- 基因组数据库:BioMart、ArrayExpress、ENA
- 其他资源:QuickGO、PSICQUIC、NCBI BLAST
所有服务使用一致的调用模式,支持 REST 和 SOAP/WSDL 协议。
2. 跨数据库标识符转换
提供便捷的标识符映射功能:
from bioservices import UniProt
u = UniProt()
# UniProt → KEGG
results = u.mapping(fr="UniProtKB_AC-ID", to="KEGG", query="P43403")
支持多种数据库对之间的转换,无需手动查找映射关系。
3. 完整的分析工作流支持
- 序列分析:FASTA 序列获取、BLAST 相似性搜索
- 通路解析:KGML pathway 解析、蛋白质互作网络提取
- 化合物检索:跨数据库化合物信息查询
- 批量处理:支持批量 ID 转换和查询
提供完整的工作流脚本示例,涵盖蛋白质分析、通路分析、化合物检索等常见场景。
常见问题
BioServices 支持哪些生物数据库?
BioServices 支持约 40 个生物信息学数据库,包括:
- 蛋白质相关:UniProt、PDB、Pfam、QuickGO
- 代谢通路:KEGG、Reactome
- 化合物:ChEBI、ChEMBL、PubChem、UniChem
- 基因组:BioMart、ArrayExpress、ENA
- 相互作用:PSICQUIC(支持 MINT、IntAct、BioGRID 等 30+ 数据库)
- 序列分析:NCBI BLAST
完整列表可查看 references/services_reference.md 文档。
如何使用 BioServices 查询 UniProt 蛋白质信息?
基本查询示例:
from bioservices import UniProt
u = UniProt(verbose=False)
# 搜索蛋白质
results = u.search("ZAP70_HUMAN", frmt="tab", columns="id,genes,organism")
# 获取 FASTA 序列
sequence = u.retrieve("P43403", "fasta")
# 标识符映射
kegg_ids = u.mapping(fr="UniProtKB_AC-ID", to="KEGG", query="P43403")
更多详细用法请参考技能文档中的"Core Capabilities"章节。
BioServices 和 Biopython 应该选择哪个?
这两个工具互补,不是替代关系:
- BioServices:适合访问在线生物数据库、跨数据库查询、标识符映射
- Biopython:适合本地序列分析、文件格式解析(FASTA、GenBank 等)
推荐组合使用:用 BioServices 从数据库获取数据,用 Biopython 进行本地序列处理和分析。
其他对比:
- 单个数据库快速查询:考虑 gget(更轻量)
- 序列/文件操作:使用 Biopython
- 跨数据库工作流:使用 BioServices
BioServices 需要 API 密钥吗?
大多数服务不需要 API 密钥。例外情况:
- NCBI BLAST:需要提供联系邮箱,可通过环境变量
NCBI_EMAIL设置 - 部分 EBI 服务:如遇频率限制可能需要注册(具体查看各服务文档)
设置邮箱:
export NCBI_EMAIL=your.email@example.com
如何批量转换生物数据库标识符?
BioServices 提供批量转换能力,可将多个标识符一次性转换:
from bioservices import UniProt
u = UniProt()
# 批量 UniProt → KEGG 转换
results = u.mapping(
fr="UniProtKB_AC-ID",
to="KEGG",
query="P43403,P12345,P67890" # 多个 ID 用逗号分隔
)
对于大规模批量处理,可使用提供的脚本:
python scripts/batch_id_converter.py input_ids.txt --from UniProtKB_AC-ID --to KEGG
BioServices 支持哪些 Python 版本?
支持 Python 3.9–3.12。安装建议使用固定版本:
uv pip install "bioservices==1.16.0"
上游 CI 测试覆盖 Python 3.9–3.12(截至 2026 年 3 月)。
如何用 BioServices 进行 BLAST 搜索?
import os
from bioservices import NCBIblast
s = NCBIblast(verbose=False)
email = os.environ["NCBI_EMAIL"]
# 提交 BLAST 任务
jobid = s.run(
program="blastp",
sequence=protein_sequence,
stype="protein",
database="uniprotkb",
email=email,
)
# 检查状态并获取结果
s.getStatus(jobid)
results = s.getResult(jobid, "out")
注意:BLAST 是异步任务,需先检查状态完成后再获取结果。必须设置 NCBI_EMAIL 环境变量。