技能bioservices
B

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 环境变量。