【发布时间】:2017-02-15 21:02:10
【问题描述】:
我无法在 Python 3.5.0 版中导入 sqlite3 模块。这是我得到的:
>>> import sqlite3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/usr/local/lib/python3.5/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: No module named '_sqlite3'
我知道,我知道,网上有很多 StackOverflow 帖子和支持论坛,人们抱怨这个问题,但到目前为止,没有一个发布的解决方案对我有用。这是我去过的地方:
我还在这台运行 CentOS 6.8 x86_64 的服务器上安装了 Python 2.6.6。使用 Python 2.6.6 时,我可以很好地打开 Python REPL 并导入 sqlite3。我也可以直接从 bash 中使用 sqlite3,而且似乎没有任何问题。
This helpful question 看起来很有希望。正如用户 jammyWolf 所建议的那样,我尝试使用
--enable-loadable-sqlite-extensions选项重新配置和重新编译 Python3.5。不,同样的错误仍然发生。我一直在像一个好孩子一样使用虚拟环境,但我对这台服务器有 root 访问权限。所以,我是个坏孩子,在没有激活任何 virtualenvs 的情况下以 root 身份运行 python3。仍然没有运气。所以我认为这与权限无关。
我注意到在错误消息中,它显示
No module named '_sqlite3'。 This thread 建议模块名称前的下划线表示该模块是一个实现细节,并且未在 API 中公开。 ...我不确定如何理解这些信息,但其中可能有提示。
有什么想法吗?
【问题讨论】:
-
sqlite3是 Python 代码;_sqlite3是 C 代码。您的发行版的原始 Python 应该已经包含 SQLite 库。 3.5是你自己编译的吗? -
是的,我自己编译了 Python 3.5。如果我尝试重新编译它,是否有特定的标志或我应该注意的东西? (另外,我不知道 _sqlite3 是 C 代码;谢谢!)
-
您的发行版没有一些 3.5 包吗?无论如何,您的问题实际上是关于如何正确编译 Python;编辑它。
-
@CL.,安装python包可以安装sqlite库包(.so)作为依赖项,但不能安装头文件、库(.h、.a、...,包含在sqlite开发包中)这是编译 python 扩展模块时需要的。
-
有趣的是,在 ubuntu 上安装 sqlite-devel 的方法是:sudo apt-get install libsqlite3-dev。 python编译的配置是一样的(./configure --enable-loadable-sqlite-extensions)。
标签: python linux python-3.x sqlite python-import