"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, которая соответствует версии привязок - то есть, вероятно, самой последней - поскольку эта комбинация была явно тщательно протестирована.