【问题标题】:How do I upgrade the SQLite version used by Python's SQLite3 module on Mac?如何在 Mac 上升级 Python 的 SQLite3 模块使用的 SQLite 版本?
【发布时间】:2014-10-13 17:54:07
【问题描述】:

我想在 Python 中使用 SQLite 3.8 版,但 SQLite3 模块使用的是过期版本。我在 Mac 上安装了 SQLite 版本 3.8.4.3,但 sqlite3.sqlite_version 仍然返回 3.7.13。

我在 SO 和其他地方进行了大量搜索,但似乎找不到明确的答案。

谢谢!

【问题讨论】:

  • 你是如何安装 SQLite 3.8.4.3 的?来自 sqlite.org 的二进制安装程序,Homebrew,签出并构建源代码,...?
  • 我相信我尝试了所有这些。是否会确保 python 包使用新版本?
  • 不,如果不做额外的事情,他们都不会确保。但是没有人能告诉你如何在不知道你做了哪个的情况下继续前进。 (以及库的最终位置,以及您的 PATH 的外观,等等。)
  • 还有一点:安装pysqlite后,我不认为它会取代sqlite3模块;我认为它为您提供了一个具有不同名称的新模块,例如pysqlite2.dbapi。所以你需要导入 that (或import <that> as sqlite3)并检查 its sqlite3_version;标准库中的那个不会改变。
  • 我一直在使用 pysqlite 和 sqlite3 模块,并按照您的指示检查版本。 which -a sqlite3 返回 /usr/bin/sqlite3 /usr/local/bin/sqlite3 和 echo $PATH 返回 /Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin。这些是您需要进一步建议的吗?

标签: python macos sqlite


【解决方案1】:

从您的 cmets 来看,您的问题是您的预装 sqlite 3.7 在您的路径上比您的第三方 3.8 更高。这意味着当你构建pysqlite2 时,默认情况下,它会找到并使用那个 3.7,所以它对你没有任何好处。而且你可能不想为了处理这个问题而改变你的整个路径。

不过没关系,只要在构建时首先找到 3.8,在运行时先出现什么并不重要; 3.8 的路径将被烘焙到模块中。有很多方法可以做到这一点,但最简单的是这样的:

$ brew install sqlite3
$ sudo -s
# LDFLAGS=-L/usr/local/opt/sqlite/lib CPPFLAGS=-I/usr/local/opt/sqlite/include pip2.7 install pysqlite
# ^D
$ python
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.7.13'
>>> import pysqlite2.dbapi2
>>> pysqlite2.dbapi2.sqlite_version
'3.8.6'

LDFLAGS 和 CPPFLAGS 变量来自brew install sqlite3 步骤的输出。如果您以其他方式安装了sqlite3,则需要获取适当的值——可能是/usr/local/lib 和/usr/local/include,但如果没有,请搜索libsqlite3.dylib 和sqlite3.h。

请注意,如果您完全遵循这些步骤,您将获得libsqlite3 的非胖版本,这意味着pysqlite2 将无法在32 位模式下工作。我怀疑这对您来说是个问题,但如果是,您可以直接安装它--universal,或者使用其他安装程序而不是 Homebrew。

【讨论】:

    【解决方案2】:

    如果您使用 Anaconda 作为包管理器,请运行 conda install -c anaconda sqlite。

    运行python -c "import sqlite3; print(sqlite3.sqlite_version)" 以确认您拥有最新版本。

    Source

    【讨论】:

    • 这对原始问题来说并不是一个很好的答案,因为他们没有提到 Anaconda,所以他们可能没有使用它。不过,作为一般建议,如果您想在系统 Python 安装中使用较新版本的包,那么使用包管理器是一个好主意。
    • 根据Anaconda's Sqlite page,当前版本为3.29。他们建议您使用相同的 conda install ... 行,但是当我运行它时,我仍然得到 3.23.1(我以前的版本)。为了强制它安装最新版本(如果你需要的话),我打电话给conda install sqlite=[version_number]。当然,现在我正在等待 Anaconda 尝试解决依赖冲突...
    【解决方案3】:

    我认为最简单的方法是将 Python 更新到最新版本,因为 sqlite3 是随 Python 一起提供的。

    否则也必须更新pysqlite 包。 Linux下有一个预编译包python-sqlite。

    您可以使用 easy_install 来做到这一点。为了构建这个包,你需要一些包。 Nessecerily 使用新安装的 sqlite3 版本构建 pysqlite,在您的情况下为 3.8.4.3。

    sudo easy_install pysqlite
    

    或

    sudo pip install --upgrade pysqlite
    

    【讨论】:

    • 我试过了,但没有运气。我是否需要做一些事情来确保新安装的 pysqlite 包是使用新的 sqlite3 版本构建的?
    • 您必须确保您的简单 sqlite 命令引用了新命令。在构建输出中可能会提示使用了哪个版本。我发现了一个类似的question。
    • easy_install (a) 已过时,并且 (b) 需要 setuptools 和 pip 一样多(事实上,它是 setuptools 的一部分),所以你真的应该'不推荐它。
    • easy_install 需要 setuptools,我改变了它。我在 Mac 上查看,发现 easy_install 但不是 pip。所以为了简单起见,我写了easy_install。
    • @wenzul - 您能否提供更多关于如何确保构建和安装引用新版本的详细信息?我看到了该链接,但无法执行所需的步骤。
    【解决方案4】:

    这适用于我在 Windows 上。

    1. 下载最新的Sqlite3预编译二进制文件 https://www.sqlite.org/download.html
    2. 找到 DLL 库 sqlite3.dll
    3. 找到存储 Python sqlite3.dll 的 Python 库文件夹
    4. 备份 Python sqlite3.dll 并将其替换为最新的 sqlite3.dll

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 1970-01-01
      • 2020-07-24
      • 2021-01-10
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多