Обновление sqlite3 Python на Debian

Я использую Python 2.7.6 (по умолчанию, Mar 22 2014, 22:59:56) [GCC 4.8.2] на linux2 на моем Debian, и я обычно использую модуль sqlite3 без каких-либо проблем.

Я скомпилировано расширение Sqlite spellfix, Я получаю эту ошибку при загрузке:

и sqlite3.OperationalError:. /spellfix.Итак: неопределенный символ: sqlite3_malloc64

Я думаю, что это может быть потому что sqlite3 модуль слишком стар:

import sqlite3
print sqlite3.version          # 2.6.0
print sqlite3.sqlite_version   # 3.8.2

(по другая машина, где sqlite3.sqlite_version is 3.8.7.X расширение загружается нормально).

пробовал:

pip install --upgrade pysqlite

но это все то же самое:sqlite3.sqlite_version остается 3.8.2.

как обновить модуль Python sqlite3 (который встроен в стандартную библиотеку)?

2 ответов


вы правы, думая, что версия sqlite3 вызывает проблему. sqlite_malloc64 была введена с версия 3.8.7.

вместо того, чтобы пытаться обновить Python sqlite3 модуль, который может в конечном итоге нарушить вашу установку Python, я бы предложил скомпилировать версию spellfix.c в комплекте с версии 3.8.2.

вы можете найти источник здесь : https://www.sqlite.org/src/tarball/27392118/SQLite-27392118.tar.gz

оттуда вы можете построить объединение с:

sh configure
make sqlite3.c

у вас будет sqlite3.h и sqlite3ext.h на . Затем скомпилируйте spellfix.c расширением с:

gcc -g -fPIC -shared spellfix.c -I ../../tsrc -o spellfix.dll

и вы должны получить совместимый spellfix.dll это работает с вашей версией sqlite3.


вот ручное решение (не рекомендуется, но поскольку я не нашел backports для libsqlite3 v3.23.1 для моей установки Linux я попробовал это, и это сработало):

  1. скачать с https://packages.debian.org/search?keywords=libsqlite3-0 новой версии. Вот прямая ссылка:

    wget http://ftp.de.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.1-1_amd64.deb
    
  2. распаковать .deb во временном папка:

    mkdir tmp
    dpkg -x libsqlite3-0_3.23.1-1_amd64.deb tmp
    

    или

    mkdir tmp; cd tmp; ar x ../libsqlite3-0_3.23.1-1_amd64.deb; tar xvfJ data.tar.xz; cd ..
    

    затем

    # keep the old one in case it wouldn't work!
    mv /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6.old   
    
    # copy the new one in the right place
    cp tmp/usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
    
  3. Это должно работать:

    python -c "import sqlite3; print sqlite3.sqlite_version"   # 3.23.1
    

отказ от ответственности: это немного Хак-иш, но это работает.