> 技术文档 > 【问题解决】No module named ‘_sqlite3‘_no module named sqlite3

【问题解决】No module named ‘_sqlite3‘_no module named sqlite3


【问题解决】No module named \'_sqlite3\'

  • 1. 检查系统自带的SQLite版本
  • 2. 安装新版SQLite
  • 2.1 方法一:源码编译安装(我用的是这个方法)
    • 2.2 方法二:使用EPEL仓库
  • 3. 重新编译Python 3.9
  • 3.1 下载压缩包并解压
    • 3.2 修改setup.py(这步可能不用,尝试了很多不同方法,忘了需不需要,加上也不要紧)
    • 3.2 确保Python正确链接到新版SQLite库
  • 4. 验证动态库链接
  • 5. 测试Python模块
  • 注意事项


背景:
1.腾讯云服务器(阿里云服务器同样的centos7.6没出现这个问题,具体原因暂不清楚);
2.系统:centos7.6;
3. python3.9

使用下面语句会报错:ModuleNotFoundError: No module named \'_sqlite3\'

from _sqlite3 import *

在CentOS 7上遇到Python的_sqlite3模块导入错误,通常是由于系统中SQLite库版本不兼容或Python编译时未正确链接导致的。

1. 检查系统自带的SQLite版本:

sqlite3 --version

若版本低于3.7.4(或Python 3.9所需的最低版本),需升级SQLite。

2. 安装新版SQLite

2.1 方法一:源码编译安装(我用的是这个方法)

# 下载最新源码(替换为实际版本)wget https://www.sqlite.org/2024/sqlite-autoconf-3420000.tar.gztar xvf sqlite-autoconf-3420000.tar.gzcd sqlite-autoconf-3420000# 编译安装到/usr/local./configure --prefix=/usr/local --enable-load-extensionmakesudo make install# 更新动态库缓存sudo ldconfig

2.2 方法二:使用EPEL仓库

若EPEL未启用,先执行:

sudo yum install epel-release

然后安装较新版本:

sudo yum install sqlite-devel

3. 重新编译Python 3.9

3.1 下载压缩包并解压

# 下载Python 3.9源码(没有3.9.9的话可以直接用3.9.0,可能要安装一些依赖,见自己安装python的博客)wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgztar xvf Python-3.9.9.tgz

3.2 修改setup.py(这步可能不用,尝试了很多不同方法,忘了需不需要,加上也不要紧)

cd Python-3.9.9vim setup.py

搜索字符串 sqlite_inc_paths(这是一个python列表),新增2个元素:

\'/usr/local/sqlite/include\', \'/usr/local/sqlite/include/sqlite3\',

【问题解决】No module named ‘_sqlite3‘_no module named sqlite3

3.2 确保Python正确链接到新版SQLite库

# 配置时指定SQLite路径export LDFLAGS=\"-L/usr/local/lib\"export CPPFLAGS=\"-I/usr/local/include\"./configure --enable-optimizations --enable-loadable-sqlite-extensions# 编译并安装makesudo make altinstall # 使用altinstall避免替换系统Python

4. 验证动态库链接

检查_sqlite3模块的依赖:

ldd /usr/local/lib/python3.9/lib-dynload/_sqlite3.cpython-39-x86_64-linux-gnu.so | grep sqlite3

应输出新版SQLite库路径:
【问题解决】No module named ‘_sqlite3‘_no module named sqlite3

5. 测试Python模块

启动Python并测试导入:

import sqlite3print(sqlite3.sqlite_version) # 应显示新版版本号

【问题解决】No module named ‘_sqlite3‘_no module named sqlite3

注意事项

权限问题:编译安装时可能需要sudo。
多版本共存:使用altinstall避免覆盖系统Python,通过python3.9命令调用。
依赖项:确保安装zlib-devel、openssl-devel等开发工具,避免编译错误。