“导入pybel”上的“ IndexError:列表索引超出范围”

时间:2019-05-13 13:14:00

标签: python django openbabel pybel

我正在使用django网络应用程序,当我安装openbabel并尝试导入pybel时出现错误

我使用的venv在执行所有这些命令时均已激活

我这样安装openbabel:

sudo apt-get install python-openbabel

我也尝试过:

sudo apt-get install openbabel libopenbabel-dev swig

然后我做了:

pip install openbabel

在那之后,我尝试导入pybel(在导入openbabel之后)

这是实际结果:

>>> import pybel
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/etudiant/QuChemPedIA/QuChemPedIAProject/venv/lib/python3.5/site-packages/pybel.py", line 94, in <module>
    descs = _getpluginnames("descriptors")
  File "/home/etudiant/QuChemPedIA/QuChemPedIAProject/venv/lib/python3.5/site-packages/pybel.py", line 84, in _getpluginnames
    return [x.split()[0] for x in plugins]
  File "/home/etudiant/QuChemPedIA/QuChemPedIAProject/venv/lib/python3.5/site-packages/pybel.py", line 84, in <listcomp>
    return [x.split()[0] for x in plugins]
IndexError: list index out of range

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

正如@Manu mathew所说,this is a bug,但不在Python的openbabel包中,而是在它包装的openbabel C库中(由apt包openbabel提供) )。

该错误已在版本openbabel/2.3.2+dfsg-3中修复,该错误适用于您的Ubuntu Xenial(根据您的Python版本判断)is not available

因此您需要升级发行版。该修复程序可用since Bionic进行,但是为了获得最佳效果,请升级到最新的发行版(有关说明,请参见下文)。


除此之外,

  • 安装python-openbabel apt软件包毫无用处,因为it's for Python 2。 Python 3的软件包将称为“ python3-openbabel”,但称为there's no such package。因此,您必须从PyPI安装绑定。
  • 通过apt-get全局安装Python软件包,并通过pip将python软件包安装到venv是多余的。
    • 如果使用的是旧发行版,则当您将PyPI中的新绑定程序包链接到系统上的旧C库时,也很容易造成损坏。如果绑定程序包是根据您的本地库构建的,则可能是要支持此版本,但谁知道此组合已测试了多少。
  • 因此,通常,apt-get版本的Python软件包应封装一个本地C库(如果有一个if you are using the system Python可用)。通过使用--system-site-packages创建,可以在venv中使全局安装的软件包可用。

但是由于在这种情况下,没有apt-get版本的绑定可用,因此您必须从PyPI安装绑定。在这种情况下,最好具有与绑定版本相对应的C库版本(即可能是最新版本),因为显然已经对该组合进行了广泛的测试。