Python3.7下MDAnalysis报错NameError: 'pbc'未定义的解决请求
解决MDAnalysis中
NameError: name 'pbc' is not defined的问题 看起来你在使用MDAnalysis的eigen_vals()方法时碰到了一个旧版本的bug,咱们一步步来解决:
报错根源
从回溯信息能看到,问题出在MDAnalysis内置的eigen_vals()方法里——它调用atomgroup.center_of_mass(pbc=pbc)时,用到了一个未定义的pbc变量。这是早期MDAnalysis版本(适配Python3.7的版本通常比较老)的一个已知问题,方法实现时遗漏了对pbc参数的定义和传递。
解决方案
这里有两个可行的处理方式,你可以根据情况选择:
方案1:升级MDAnalysis到兼容Python3.7的最新版本
Python3.7最高支持MDAnalysis 2.0.x系列版本,你可以通过pip升级:
pip install "MDAnalysis<=2.0.0" --upgrade
升级后这个bug应该已经被修复,eigen_vals()方法会正确处理pbc参数。
方案2:手动修复内置方法的代码
如果你暂时不想升级,可以直接修改报错文件的代码:
- 打开路径为
/home/pulokdeb/ENV/lib/python3.7/site-packages/MDAnalysis/core/topologyattrs.py的文件 - 找到
eigen_vals方法的定义,修改成如下形式:
def eigen_vals(self, pbc=False): com = self.center_of_mass(pbc=pbc) # 保留该方法原本的其余代码不变
之后调用iio.eigen_vals()时,就可以正常传递pbc参数(或者使用默认值False),不会再触发NameError。
另外提一句,你自己实现的radius_of_gyration方法是完全正确的,它对pbc参数的处理没有问题,不用修改这部分代码~
内容的提问来源于stack exchange,提问作者Pulok Kanti Deb
相关产品推荐
相关产品推荐

