«IndexError: список индексов вне диапазона» в «import pybel» - PullRequest
0 голосов
/ 13 мая 2019

Я работаю над веб-приложением 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 голосов
/ 13 мая 2019

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

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

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


Кроме того,

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

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

...