I'm using Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 on my Debian, and I'm usually using module sqlite3
without any problem.
I compiled a Sqlite extension spellfix
, I get this error when loading it:
sqlite3.OperationalError: ./spellfix.so: undefined symbol: sqlite3_malloc64
I think it might be because the sqlite3
module is too old:
import sqlite3
print sqlite3.version # 2.6.0
print sqlite3.sqlite_version # 3.8.2
(On another machine where sqlite3.sqlite_version
is 3.8.7.x the extension loads fine).
I tried:
pip install --upgrade pysqlite
but it's still the same: sqlite3.sqlite_version
stays 3.8.2.
How to upgrade the Python sqlite3 module (which is built-in in the standard library)?
Here is a manual solution (NOT RECOMMENDED, but as I didn't find backports for libsqlite3 v3.23.1 for my Linux install, I tried this, and it worked):
Download from https://packages.debian.org/search?keywords=libsqlite3-0 a newer version. Here is a direct link:
Decompress the .deb in a temporary folder:
or
then
It should work:
Disclaimer: this is a bit hack-ish, but it works.
You are right in thinking that the version of
sqlite3
causes the problem.sqlite_malloc64
was introduced with release 3.8.7.Instead of trying to upgrade the Python
sqlite3
module which may end up breaking your Python installation, I would suggest compiling the version ofspellfix.c
included with version 3.8.2.You can find the source here: https://www.sqlite.org/src/tarball/27392118/SQLite-27392118.tar.gz
From there you can build the amalgamation with:
You will have
sqlite3.h
andsqlite3ext.h
in thetsrc
folder. Then compile thespellfix.c
extension with:And you should get a compatible
spellfix.dll
that runs with your version of sqlite3.