Обновление 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 я попробовал это, и это сработало):
-
скачать с 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
-
распаковать .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
-
Это должно работать:
python -c "import sqlite3; print sqlite3.sqlite_version" # 3.23.1
отказ от ответственности: это немного Хак-иш, но это работает.