199

PyRosetta:用 Python 调用 Rosetta 的工程路线

PyRosetta 把 Rosetta 能力暴露为 Python 接口,便于脚本化并与 AI 工具集成。这篇给出安装、常用对象与典型精修/打分代码。

PyRosetta 把 Rosetta 的 C++ 能力封装成 Python 接口。相比编译整套 Rosetta 再写 XML 协议,它让你能在 Jupyter 里交互式操作蛋白结构,并直接与 PyTorch、RDKit 等 AI 工具栈混用——这是今天把 Rosetta 接进 AI 管线最实际的方式。

安装与许可

# 需先在官网注册获取账号(学术免费,商业需授权)
pip install pyrosetta-installer
python -c 'import pyrosetta_installer; pyrosetta_installer.install_pyrosetta()'

python -c "import pyrosetta; pyrosetta.init(); print('ok')"

许可与 Rosetta 主体一致:学术与非营利免费,商业使用需付费授权。这一点在把它写进生产管线前必须确认清楚。

核心对象模型

对象 含义
Pose 蛋白结构的核心容器(坐标、序列、能量、约束)
ScoreFunction 能量函数,如 ref2015
Mover 修改 Pose 的操作:relax、minimize、pack、docking
TaskFactory 控制哪些残基可设计 / 可重装配
MoveMap 控制哪些自由度可动(主链 / 侧链)

最常用的两段代码

import pyrosetta
from pyrosetta import pose_from_pdb, get_fa_scorefxn
from pyrosetta.rosetta.protocols.relax import FastRelax

pyrosetta.init("-mute all -ex1 -ex2aro")

# 1) 打分:评估一个结构的能量
pose = pose_from_pdb("design.pdb")
scorefxn = get_fa_scorefxn()                 # ref2015
print("total score", scorefxn(pose))
print(pose.energies().residue_total_energies(10))   # 逐残基能量

# 2) 精修:AI 生成结构的标准后处理
relax = FastRelax()
relax.set_scorefxn(scorefxn)
relax.constrain_relax_to_start_coords(True)  # 约束到初始坐标,避免跑偏
relax.apply(pose)
pose.dump_pdb("design_relaxed.pdb")
print("after relax", scorefxn(pose))

constrain_relax_to_start_coords(True) 很重要:不加约束的 relax 可能把结构改得面目全非,失去与设计目标的对应关系。

接进 AI 管线的三个典型位置

  • 结构清洗与修复:AI 生成或预测的结构常有原子缺失、键长异常,用 PyRosetta 补全并 relax,再进入后续计算。
  • 能量过滤:对 RFdiffusion + ProteinMPNN 产出的成百上千个设计批量打分,滤掉能量明显异常的。相比只看 pLDDT,加一层物理能量判据能提高筛选质量。
  • 界面分析:用 InterfaceAnalyzerMover 算结合界面的埋藏面积、界面能量、氢键数,用于评估结合物设计。
from pyrosetta.rosetta.protocols.analysis import InterfaceAnalyzerMover
ia = InterfaceAnalyzerMover(1)          # 界面跳跃编号
ia.set_pack_separated(True)
ia.apply(pose)
print("dG_separated", ia.get_interface_dG())
print("buried SASA", ia.get_interface_delta_sasa())

性能与实践建议

  • FastRelax 很慢:单个中等蛋白可能需要数十秒到数分钟。批量处理必须并行,用 multiprocessing 或作业调度器铺开。
  • 初始化选项影响大-ex1 -ex2aro 扩展旋转异构体采样,质量更好但更慢;批量粗筛可省略。
  • 随机性:多数 mover 有随机成分,需要复现时用 -constant_seed 并记录种子。
  • 内存:大批量处理时注意及时释放 Pose,长时间循环容易累积内存。

上手提示

  • 它是把 Rosetta 接进 AI 管线最实际的方式,核心用途是精修 + 能量过滤;
  • relax 时务必加坐标约束,否则结构可能跑偏;
  • FastRelax 很慢,批量处理必须并行并规划算力;
  • 商业使用需授权,写进生产前先确认许可。

延伸资源