Python: pysqlite库不支持C扩展加载

5

我正在尝试让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,在相同的用户下并使用sudo,使用pip安装了pysqlite。我也尝试自己编译pysqlite并启用扩展加载。

需要帮助?


值得注意的是,你可能可以直接从Ubuntu的软件包管理器安装它(http://packages.ubuntu.com/hardy/python-pysqlite2),这可能会更容易。不过这并不能解决你的问题。 - Gareth Latty
我安装了这个包,但是它并没有被成功安装,因为根据我所读到的资料,它是预编译的,没有加载扩展。 - rebelliard
2个回答

4

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)


1
我曾经遇到过同样的问题,并写了一份指南:http://technotes.tumblr.com/post/40838871308/django-with-sqlite-as-a-geospatial-database - webjay
@webjay 我尝试了你的指南,最终执行了以下步骤: python setup.py build #代替 build_static - a.m.
你如何在不手动编辑pysqlite源代码的情况下完成这个操作? - Cerin
1
我认为这个配置不是“源代码”,但如果你认为是的话,那我就不知道了。 - BradHards

0
这里提出的解决方案似乎适用于旧系统/Python2。对于较新版本的Python(例如3.8),sqlite作为标准库的一部分进行了发布,并且需要使用已配置的sqlite库构建Python。
例如,在MacOS上使用homebrew和pyenv(假设满足Python依赖项并且通过homebrew安装了启用扩展加载的sqlite):
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

如需详细解决方案,请查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接