【问题标题】:OS X 10.8.2 python 3 import sqlite errorOS X 10.8.2 python 3导入sqlite错误
【发布时间】:2013-02-11 17:29:56
【问题描述】:

当从 python3 shell 导入 sqlite 时,brew 安装了 python3 和使用 --enable-loadable-sqlite-extensions 手动编译的 python3 都失败了。请帮忙!

【问题讨论】:

  • 对不起,忽略上面的评论。错误消息:Python 3.3.0(默认,2013 年 2 月 11 日,08:22:56)>>> 导入 sqlite3 Traceback(最后一次调用):文件“”,第 1 行,在 文件“/ usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/lib/python3.3/sqlite3/__init__.py”,第 23 行,在 中 from sqlite3.dbapi2 import * File” /usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/lib/python3.3/sqlite3/dbapi2.py”,第 26 行,在 from _sqlite3 import * ImportError: No名为“_sqlite3”的模块

标签: macos sqlite python-3.x


【解决方案1】:

模块名为sqlite3,而不是sqlite

import sqlite3

http://docs.python.org/3/library/sqlite3.html

更新:现在我们已经清除了模块名称,报告的问题:

ImportError: No module named '_sqlite3'

意味着您的 Python 实例找不到 C 扩展模块 _sqlite3.so,它是标准库中 sqlite3 模块的一部分。由于回溯中dbapi2.py 的文件路径看起来很合理,因此问题可能不是路径问题(sys.path)。 _sqlite3 扩展模块很可能无法构建或链接。检查 Python 构建的输出是否有错误。 OS X 10.8 包含sqlite3 版本,但出于安全原因,它不包含可选的可加载扩展功能。您的 Python 版本可能包含以下消息:

Failed to build these modules:
_sqlite3

还有,之前是这样的:

*** WARNING: renaming "_sqlite3" since importing it failed: dlopen(build/lib.macosx-10.8-x86_64-3.3-pydebug/_sqlite3.so, 2): Symbol not found: _sqlite3_enable_load_extension
  Referenced from: build/lib.macosx-10.8-x86_64-3.3-pydebug/_sqlite3.so
  Expected in: flat namespace
 in build/lib.macosx-10.8-x86_64-3.3-pydebug/_sqlite3.so

解决方案是构建并安装使用可加载扩展功能构建的 sqlite3 的单独副本。如果您使用 Homebrew,它的 sqlite recipe with the with-functions option 应该这样做。然后重建 Python。

【讨论】:

  • 感谢您的帮助内德。我认为 brew install sqlite --with-functions 完成得很好,但是 brew install python3 仍然以同样的 import sqlite3 错误告终。我的猜测是它不知道 brew 安装的 sqlite 版本,并且仍然链接到系统 sqlite。知道如何将 python3 链接到 brew sqlite 吗?最后,a hint from github 给了我我想要的东西,但感觉不是正确的方法。我想知道这是否会导致以后与系统 sqlite3 发生冲突。
  • 我没有密切关注 Homebrew 的开发,但总的来说,该项目非常小心,以避免与 Apple 提供的软件发生冲突。在不同位置安装多个 sqlite3 lib 副本不是问题。
【解决方案2】:

Homebrew 为 python3 提供 sqlite3 支持和可加载模块。

brew install python3 会做正确的事(也可以 brew sqlite)。

有一个错误,可能让您感到震惊,但它一直是fixed

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多