模块未找到错误:没有名为'_sqlite3'的模块。

20
在Redhat 4.4.7-18上,我正在尝试使用sqlite运行python3代码,但我遇到了以下导入错误:

在Redhat 4.4.7-18上,我正在尝试使用sqlite运行Python3代码,但是我遇到了以下的导入错误:

Traceback (most recent call last):
  File "database.py", line 7, in <module>
    import sqlite3
  File "/usr/local/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/local/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
我尝试安装它:

>sudo pip install sqlite3
Collecting sqlite3
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', error(101, 'Network is unreachable'))': /simple/sqlite3/

当网络可到达时,使用以下命令:

> sudo yum install sqlite-devel
Loaded plugins: post-transaction-actions, product-id, refresh-packagekit,
              : rhnplugin, search-disabled-repos, security, subscription-manager
This system is receiving updates from RHN Classic or RHN Satellite.
Setting up Install Process
Package sqlite-devel-3.6.20-1.el6_7.2.x86_64 already installed and latest version
Nothing to do

所以它已经安装了但又没有安装?有什么建议可以解决原始问题吗?


1
sqlite3是标准库中的可选模块,但它未被编译到您的平台上。您是如何安装Python的?如果您是从源代码编译的,那么您需要为该模块提供sqlite开发头文件以便进行编译。 - Martijn Pieters
有没有一个页面描述如何检查我是否拥有头文件,如何安装头文件,以及在哪里和如何编译sqlite? - Alex
在Redhat上,我会寻找一个libsqlite3-devel软件包。 - Martijn Pieters
我确实问过你如何安装Python。./configure脚本有一个--help选项,详细说明了它将查找的所有不同内容以及如何告诉它在其他地方查找。如果您没有在SQLite头文件位于标准位置的计算机上编译Python,则永远不会编译_sqlite3 C模块,这就是我能告诉您的全部内容,因此我给出了标准响应。 - Martijn Pieters
我不记得安装过它。我认为电脑上的内容就是原样... - Alex
显示剩余2条评论
4个回答

28

这不是一个直接的答案,但我通过搜索引擎来到了这里...所以给我的翻网友们提供一个参考:

我遇到了类似的问题,但是在ubuntu 16.04上手动编译的python3.6版本中出现了问题:

    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

我必须安装libsqlite3-devsudo apt install libsqlite3-dev),并从头开始编译Python3.6才能使其工作。


1
对于我来说,我必须使用“sudo yum install libsqlite3x-devel.x86_64”来安装RHEL/CentOS的库。 - D Untouchable
这仅适用于Ubuntu和Debian操作系统。 - Mr Coder
2
请参考以下链接中的答案,按照其中的说明重新编译pyenv环境:https://dev59.com/DbXna4cB1Zd3GeqPEAuF - svenski
这是否意味着我在安装模块后必须重新编译Python?我的Python是通过工具安装的,而不是自己下载和构建的。我该怎么办? - han shih

11
是的。
sudo yum install sqlite-devel

按照从源代码重建 Python 3.8.3 的步骤进行操作就解决了问题。感谢!


出现了相同的错误,但是sqlite-devel已经安装了。 - Coliban

6

在安装成功sqlite3之后,我在Linux Mint 20上遇到了这个问题。

from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

同时,无法将sqlite3导入Python解释器

解决方法:

sudo apt install libsqlite3-dev

进入您的Python安装目录

./configure sudo make install


2
对我来说,按照你所说的方式工作,需要添加:./configure --enable-loadable-sqlite-extensions --enable-optimizations。 - user8920367
same as @user8920367 - W. Dan

4

当您使用源代码安装 Python 并进行编译时,可能会出现此问题。 通常人们倾向于将 Python 和 SQLite 安装到不同的文件夹中。这会导致 SQLite 二进制文件对 Python 可执行文件不可访问。

要解决此问题,请使用一个共同的文件夹来安装 Python 和 SQLite,使得 Python 二进制文件和 SQLite 二进制文件都驻留在同一个 bin 文件夹中。

下面的示例脚本将解决此问题:

INSTALL_BASE_PATH="/home/<user>/<tools>"
cd ~
mkdir build
cd build
[ -f Python-3.9.10.tgz ] || wget --no-check-certificate https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz
tar -zxvf Python-3.9.10.tgz

[ -f sqlite-autoconf-3380000.tar.gz ] || wget --no-check-certificate https://www.sqlite.org/2022/sqlite-autoconf-3380000.tar.gz
tar -zxvf sqlite-autoconf-3380000.tar.gz

cd sqlite-autoconf-3380000
./configure --prefix=${INSTALL_BASE_PATH}
make
make install

cd ../Python-3.9.10
LD_RUN_PATH=${INSTALL_BASE_PATH}/lib configure
LDFLAGS="-L ${INSTALL_BASE_PATH}/lib"
CPPFLAGS="-I ${INSTALL_BASE_PATH}/include"
LD_RUN_PATH=${INSTALL_BASE_PATH}/lib make
./configure --prefix=${INSTALL_BASE_PATH}
make
make install

cd ~
LINE_TO_ADD="export PATH=${INSTALL_BASE_PATH}/bin:\$PATH"
if grep -q -v "${LINE_TO_ADD}" $HOME/.bashrc; then echo "${LINE_TO_ADD}" >> $HOME/.bashrc; fi

LINE_TO_ADD="export LD_LIBRARY_PATH=${INSTALL_BASE_PATH}/lib"
if grep -q -v "${LINE_TO_ADD}" $HOME/.bashrc; then echo "${LINE_TO_ADD}" >> $HOME/.bashrc; fi

source $HOME/.bashrc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接