在Debian上升级Python的sqlite3

2024-09-25 08:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Debian上的linux2上使用了Python2.7.6(默认值,2014年3月22日,22:59:56)[gcc4.8.2],我通常使用模块sqlite3。在

compiled a Sqlite extensionspellfix,我在加载它时得到了这个错误:

sqlite3.OperationalError: ./spellfix.so: undefined symbol: sqlite3_malloc64

我想可能是因为sqlite3模块太旧了:

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

(在另一台机器上,sqlite3.sqlite_version为3.8.7.x,扩展加载良好)。在

我试过了:

^{pr2}$

但还是一样:sqlite3.sqlite_version保持3.8.2。在

如何升级Python sqlite3模块(内置于标准库中)?


Tags: 模块sqlitesoversion错误debiansqlite3print
2条回答

这里是一个手动解决方案(不推荐,但由于我没有找到用于Linux安装的libsqlite3v3.23.1的backports,我尝试了这个方法,并且成功了):

  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:

    ^{pr2}$

    或者

    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
    

免责声明:这有点老套,但它是有效的。在

您认为sqlite3的版本导致了问题,这是正确的。sqlite_malloc64与{a1}一起引入。在

我建议编译3.8.2版中包含的spellfix.c版本,而不是尝试升级Pythonsqlite3模块,这可能会导致Python安装中断。在

您可以在这里找到来源:https://www.sqlite.org/src/tarball/27392118/SQLite-27392118.tar.gz

在此基础上,您可以建立合并:

sh configure
make sqlite3.c

您将在tsrc文件夹中拥有sqlite3.h和{}。然后编译spellfix.c扩展名:

^{pr2}$

您应该得到一个兼容的spellfix.dll,它与您的sqlite3版本一起运行。在

相关问题 更多 >