0

我正在开发一个网络应用程序 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

请问有什么帮助吗?

4

1 回答 1

0

正如@Manu mathew 所说,这是一个错误,但不在 Python 的openbabel包中,而是在openbabel它包装的 C 库中(由openbabelapt 包提供)。

该错误已在openbabel/2.3.2+dfsg-3您的 Ubuntu Xenial(根据您的 Python 版本判断)不可用的版本中修复。

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


除此之外,

  • 安装python-openbabelapt 包是没用的,因为它是用于 Python 2 的。Python 3 的包将被称为“ python3-openbabel”,但没有这样的包。所以你必须从 PyPI 安装绑定。
  • 将 Python 包全局安装apt-get到 venv withpip是多余的。
    • 如果您使用的是旧发行版,当您将来自 PyPI 的新绑定包链接到系统上的旧 C 库时,您也可能会损坏自己。如果 bindings 包针对您的本地库构建,它可能意味着支持这个版本,但谁知道这个组合经过了多少测试。
  • 因此,通常情况下,如果您使用系统 Python,您应该更喜欢apt-get包装本地 C 库的 Python 包版本。您可以通过使用.--system-site-packages

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

于 2019-05-13T14:11:31.853 回答