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

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

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

背景:

1.腾讯云服务器(阿里云服务器同样的centos7.6没出现这个问题,具体原因暂不清楚);

2.系统:centos7.6;

  1. python3.9

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

python 复制代码
from _sqlite3 import *

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

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

bash 复制代码
sqlite3 --version

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

2. 安装新版SQLite

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

bash 复制代码
# 下载最新源码(替换为实际版本)
wget https://www.sqlite.org/2024/sqlite-autoconf-3420000.tar.gz
tar xvf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000

# 编译安装到/usr/local
./configure --prefix=/usr/local --enable-load-extension
make
sudo make install

# 更新动态库缓存
sudo ldconfig

2.2 方法二:使用EPEL仓库

若EPEL未启用,先执行:

bash 复制代码
sudo yum install epel-release

然后安装较新版本:

bash 复制代码
sudo yum install sqlite-devel

3. 重新编译Python 3.9

3.1 下载压缩包并解压

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

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

bash 复制代码
cd Python-3.9.9
vim setup.py

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

复制代码
'/usr/local/sqlite/include', '/usr/local/sqlite/include/sqlite3',

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

bash 复制代码
# 配置时指定SQLite路径
export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS="-I/usr/local/include"
./configure --enable-optimizations --enable-loadable-sqlite-extensions

# 编译并安装
make
sudo make altinstall  # 使用altinstall避免替换系统Python

4. 验证动态库链接

检查_sqlite3模块的依赖:

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

应输出新版SQLite库路径:

5. 测试Python模块

启动Python并测试导入:

python 复制代码
import sqlite3
print(sqlite3.sqlite_version)  # 应显示新版版本号

注意事项

权限问题:编译安装时可能需要sudo。

多版本共存:使用altinstall避免覆盖系统Python,通过python3.9命令调用。

依赖项:确保安装zlib-devel、openssl-devel等开发工具,避免编译错误。

相关推荐
我的xiaodoujiao2 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099672 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing3 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉4 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀4 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
你驴我4 小时前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
AC赳赳老秦7 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
huangdong_7 小时前
电商图片下载工具横向对比深度评测:固乔、FATKUN、图快、当图、淘蛙、存图宝七款工具全面解析
python
满怀冰雪7 小时前
04-Paddle Tensor 基础:形状、数据类型、广播与索引
python·深度学习·神经网络·paddle
cui_ruicheng7 小时前
Python从入门到实战(十五):文件操作与目录管理
开发语言·python