【问题标题】:Upgrade Python's sqlite3 on Debian在 Debian 上升级 Python 的 sqlite3
【发布时间】:2018-09-24 01:01:00
【问题描述】:

我在我的 Debian 上的 linux2 上使用 Python 2.7.6(默认,2014 年 3 月 22 日,22:59:56)[GCC 4.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 的另一台机器上,扩展加载正常)。

我试过了:

pip install --upgrade pysqlite

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

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

【问题讨论】:

标签: python sqlite pip debian


【解决方案1】:

这是一个手动解决方案(不推荐,但由于我没有为我的 Linux 安装找到 libsqlite3 v3.23.1 的反向移植,所以我尝试了这个,并且成功了):

  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
    

免责声明:这有点骇人听闻,但确实有效。

【讨论】:

  • Hack-ish 确实如此。我尝试将 sqlite 从 3.34 更新到 3.37 并遇到其他版本依赖项。最终我认为这不值得努力。不过谢谢!
【解决方案2】:

您认为sqlite3 的版本会导致问题是正确的。 sqlite_malloc64 与 release 3.8.7 一起介绍。

我建议不要尝试升级 Python sqlite3 模块(这可能会破坏您的 Python 安装),而是建议编译 3.8.2 版中包含的 spellfix.c 版本。

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

从那里你可以建立合并:

sh configure
make sqlite3.c

tsrc 文件夹中将有 sqlite3.h 和 sqlite3ext.h。然后编译 spellfix.c 扩展名:

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

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

【讨论】:

  • 非常感谢。我可以使用 2 个类似于 sqlite.org/2016/sqlite-src-3110100.zip 和 sqlite.org/2016/sqlite-amalgamation-3110100.zip 的链接吗?所以我可以直接重用这个:stackoverflow.com/a/49815419/1422096
  • 我一直在寻找它们,但我只能找到3.8.2的来源。当我有时间时,我会仔细检查。希望以上内容能让您启动并运行,尽管它并不能完全回答您关于如何升级sqlite3的问题!
  • 再次非常感谢!现在这个recipe 相当完整:)
  • 出于好奇,您为什么使用 2014 操作系统?
  • 你说得对,这 100% 是我的错,并且可能是对 If it ain't wrong, don't fix it 的错误使用;)另一个真正的原因是我需要另一台服务器来处理临时重新安装等。
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2021-01-10
  • 2021-11-08
  • 2016-02-10
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多