调用sPyRMSD的io.loadmol()时出现NameError: load未定义错误
sPyRMSD
io.loadmol() 报 NameError: name 'load' is not defined 错误解决 问题重现
运行以下代码时触发错误:
from spyrmsd import io,rmsd ref = io.loadmol("tempref.pdb")
报错信息
Reference Molecule:lig_ref.pdb PDBqt File:ligand_vina_out.pdbqt Traceback (most recent call last): File "rmsd.py", line 34, in <module> ref = io.loadmol("tempref.pdb") File "/home/aathiranair/.local/lib/python3.8/site-packages/spyrmsd/io.py", line 66, in loadmol mol = load(fname) NameError: name 'load' is not defined
已尝试操作
- 卸载并重装sPyRMSD
- 创建虚拟环境运行脚本
问题依旧存在。
目标PDB文件内容(tempref.pdb)
ATOM 1 O6 LIG 359 2.349 1.014 7.089 0.00 0.00 ATOM 9 H LIG 359 1.306 1.691 9.381 0.00 0.00 ATOM 2 C2 LIG 359 0.029 4.120 8.082 0.00 0.00 ATOM 3 O9 LIG 359 -1.106 2.491 9.345 0.00 0.00 ATOM 4 C1 LIG 359 -0.204 3.890 0.337 0.00 0.00 ATOM 5 S5 LIG 359 -0.355 4.108 4.075 0.00 0.00 ATOM 8 C4 LIG 359 -3.545 1.329 7.893 0.00 0.00 ATOM 7 C7 LIG 359 -1.133 5.150 9.406 0.00 0.00 ATOM 6 C3 LIG 359 -0.064 1.805 8.234 0.00 0.00
解决方案
该错误属于sPyRMSD模块内部的代码bug,io.loadmol()函数中调用了未定义的load变量,可通过以下方式解决:
方法1:绕过io.loadmol(),直接用依赖库加载分子
sPyRMSD依赖OpenBabel或RDKit,可直接用这些库加载分子后转换为sPyRMSD兼容格式:
- 使用OpenBabel示例:
from openbabel import pybel from spyrmsd import rmsd # 加载PDB文件 ref_mol = next(pybel.readfile("pdb", "tempref.pdb")) # 转换为sPyRMSD可用的Molecule对象 ref = rmsd.Molecule.from_obabel(ref_mol)
- 使用RDKit示例:
from rdkit import Chem from spyrmsd import rmsd # 加载PDB文件 ref_mol = Chem.MolFromPDBFile("tempref.pdb") # 转换为sPyRMSD可用的Molecule对象 ref = rmsd.Molecule.from_rdkit(ref_mol)
方法2:手动修复sPyRMSD的io.py文件
找到安装路径下的/home/aathiranair/.local/lib/python3.8/site-packages/spyrmsd/io.py文件,修改loadmol函数:
原代码片段:
def loadmol(fname: str, **kwargs) -> Molecule: mol = load(fname) return mol
修改为(显式导入load函数):
def loadmol(fname: str, **kwargs) -> Molecule: from .io import load mol = load(fname, **kwargs) return mol
方法3:安装开发版修复bug
如果官方已修复该问题,可直接安装开发版本:
pip install git+https://github.com/RMeli/spyrmsd.git
内容的提问来源于stack exchange,提问作者Aathira Nair
相关产品推荐
相关产品推荐

