2013-02-11 55 views
0

当从python3 shell导入sqlite时,两个brew都安装了python3并且手动编译了带有--enable-loadable-sqlite-extensions的python3失败。请帮忙!OS X 10.8.2 python 3导入sqlite错误

+1

它是如何失败? – 2013-02-11 17:38:48

+0

抱歉,请忽略上述评论。错误信息:Python的3.3.0(默认情况下,2013年2月11日,8时22分56秒) >>>进口sqlite3的 回溯(最近通话最后一个): 文件 “”,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' – 2013-02-11 18:11:48

回答

0

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

brew install python3会做正确的事情(和brew sqlite)。

有一个错误,可能会打击你,但它一直是fixed

2

模块被命名为sqlite3,不sqlite

import sqlite3 

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

更新:现在,我们已经清理模块的名字,这个问题被报告:

ImportError: No module named '_sqlite3' 

意味着您的Python实例无法找到C扩展模块_sqlite3.so,它是的一部分标准库中的模块。由于回溯中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。

+0

感谢您的帮助Ned。我认为brew安装sqlite --with-functions完成得很好,但brew安装python3仍然以相同的import sqlite3错误结束。我的猜测是它不知道brew的安装版本的sqlite,并且仍然链接到系统sqlite。任何想法如何将python3链接到brew sqlite?最后,[来自github的提示](https://github.com/mxcl/homebrew/issues/17765)给了我想要的东西,但它并不觉得这是正确的方式。我想知道这是否会导致与系统sqlite3之后的冲突。 – 2013-02-12 01:13:40

+0

我并没有密切关注Homebrew的发展,但总体而言,该项目非常小心,以避免与Apple提供的软件发生冲突。在不同位置安装多个sqlite3 lib副本并不是问题。 – 2013-02-12 02:38:39