"IndexError: список индексов вне диапазона" в "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

Любая помощь, пожалуйста?

1 ответ

Решение

Как сказал @Manu Мэтью, это ошибка, но не в Python openbabel пакет, а в openbabel Библиотека C, в которую она помещается (предоставляется openbabel удачный пакет).

Ошибка исправлена ​​в версии openbabel/2.3.2+dfsg-3 что для вашего Ubuntu Xenial (судя по вашей версии Python) недоступно.

Так что вам нужно обновить ваш дистрибутив. Это исправление доступно начиная с Bionic, но для достижения наилучших результатов обновите его до последней версии дистрибутива (объяснение см. Ниже).


Кроме того,

  • Установка python-openbabel Пакет apt бесполезен, потому что он для Python 2. Пакет для Python 3 будет называться " python3-openbabel "но такого пакета нет. Поэтому вам нужно установить привязки из PyPI.
  • Установка пакета Python глобально с apt-get и в вену с pip избыточно
    • Если вы используете старый дистрибутив, вы также открываете себя для возможной поломки, когда связываете новый пакет привязок из PyPI со старой библиотекой C в вашей системе. Если пакет bindings создается для вашей локальной библиотеки, вероятно, он предназначен для поддержки этой версии, но кто знает, сколько было протестировано этой комбинации.
  • Так что обычно вы предпочитаете apt-get версия пакета Python, который упаковывает локальную библиотеку C, если она доступна, если вы используете системный Python. Вы можете сделать глобально установленные пакеты доступными в venv, создав его с помощью --system-site-packages,

Но так как в этом случае нет apt-get версия привязок доступна, вы должны установить привязки из PyPI. В этом случае вам лучше иметь версию библиотеки C, которая соответствует версии привязок - то есть, вероятно, самой последней - поскольку эта комбинация была явно тщательно протестирована.

Другие вопросы по тегам