"IndexError: list index out of range" on "import pybel"

"IndexError: list index out of range" on "import 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

有什么帮助吗?

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

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

所以你需要升级你的发行版。该修复程序可用 since Bionic,但为了获得最佳效果,请升级到最新的发行版 (请参阅下面的解释)。


除此之外,

  • 安装 python-openbabel apt 包没用 因为 it's for Python 2. A package for Python 3 would be called "python3-openbabel" but there's no such package。所以你必须从 PyPI 安装绑定。
  • 使用 apt-get 全局安装 Python 包并使用 pip 安装到 venv 中是多余的。
    • 如果您使用的是旧发行版,那么当您 link 来自 PyPI 的新绑定包针对您系统上的旧 C 库时,您也会面临可能的破坏。如果绑定包是针对您的本地库构建的,它很可能是为了支持这个版本,但谁知道这个组合经过了多少测试。
  • 所以通常情况下,您应该更喜欢 apt-get 版本的 Python 包,它包装了一个本地 C 库(如果可用的话). You can make globally installed packages available in a venv by creating it with --system-site-packages

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