Python: библиотека pysqlite не поддерживает загрузку расширения C
Я пытаюсь заставить Spatialite работать с моим приложением django, но попал в следующую стену:
raise ImproperlyConfigured('The pysqlite library does not support C extension loading. '
django.core.exceptions.ImproperlyConfigured: The pysqlite library does not support C extension loading. Both SQLite and pysqlite must be configured to allow the loading of extensions to use SpatiaLite.
make: *** [syncdb] Error 1
Используя Ubuntu 12.04, я установил pysqlite, используя pip
внутри того же пользователя и с sudo. Я также попытался скомпилировать pysqlite и включил загрузку расширений самостоятельно.
Помогите?
1 ответ
По умолчанию для pysqlite используется сборка без поддержки загрузки расширений. Так что просто восстановление не поможет. Вам нужно изменить настройку (в setup.cfg).
Поэтому я бы предложил скачать как tarball и посмотреть в setup.cfg:
[build_ext]
#define=
#include_dirs=/usr/local/include
#library_dirs=/usr/local/lib
libraries=sqlite3
define=SQLITE_OMIT_LOAD_EXTENSION
Эта последняя строка - проблема. Самый простой способ - просто закомментировать (добавить # в начале строки), чтобы он выглядел так:
[build_ext]
#define=
#include_dirs=/usr/local/include
#library_dirs=/usr/local/lib
libraries=sqlite3
# define=SQLITE_OMIT_LOAD_EXTENSION
Затем пересоберите в соответствии с инструкциями в tarball (см. Doc/install-source.txt)
Предлагаемое здесь решение, похоже, применимо к более старым системам /Python2. Для более новых версий Python (например, 3.8) sqlite поставляется как часть стандартной библиотеки, и необходимо собрать Python с соответствующим образом настроенной библиотекой sqlite.
Например, в MacOS с использованием homebrew и pyenv (при условии, что зависимости Python соблюдены и sqlite был установлен через homebrew с включенной загрузкой расширений):
PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=\$(brew --prefix openssl)" \
LDFLAGS="-L/usr/local/opt/sqlite/lib" \
CPPFLAGS="-I/usr/local/opt/sqlite/include" \
pyenv install 3.8.2
Подробное решение можно найти здесь