ModuleNotFoundError: No module named ‘_sqlite3‘

2025-03-05 补充

Python3.10的_sqlite3.xxx.so文件,拷贝到Python3.12和Python3.13(ubuntu系统)都是不行的

可以这样解决:

sudo apt install libsqlite3-dev
cd Python-3.13.1
./configure --enable-optimizations --enable-loadable-sqlite-extensions
make
sudo make altinstall

Ref:The following modules are *disabled* in configure script:_sqlite3-CSDN博客

===========

2022-11-10 腾讯云轻量服务器ubuntu22系统,安装python3.11之后,执行sqlite3相关的单元测试时,报错如下:

ImportError while loading conftest '/home/ubuntu/github/aerich/conftest.py'.
conftest.py:8: in <module>
    from tortoise.backends.sqlite.schema_generator import SqliteSchemaGenerator
../../.cache/pypoetry/virtualenvs/aerich-gJE0JmoO-py3.11/lib/python3.11/site-packages/tortoise/backends/sqlite/__init__.py:1: in <module>
    from .client import SqliteClient
../../.cache/pypoetry/virtualenvs/aerich-gJE0JmoO-py3.11/lib/python3.11/site-packages/tortoise/backends/sqlite/client.py:3: in <module>
    import sqlite3
/usr/local/lib/python3.11/sqlite3/__init__.py:57: in <module>
    from sqlite3.dbapi2 import *
/usr/local/lib/python3.11/sqlite3/dbapi2.py:27: in <module>
    from _sqlite3 import *
E   ModuleNotFoundError: No module named '_sqlite3'

原因:python3.11是通过源码手动安装的,而系统自带的是python3.10,所以sudo apt install python3-dev命令是默认把sqlite扩展安装到python3.10下的,于是就导致3.11版本的缺少对应的.so文件

解决:把3.10的_sqlite3.xxx.so文件复制到3.11的动态库里

具体命令如下:

1. 展示python3.10的sqlite3模块的so文件路径

python3.10 -c 'import _sqlite3 as m;print(m.__file__)'

我的输出为:

/usr/lib/python3.10/lib-dynload/_sqlite3.cpython-310-x86_64-linux-gnu.so

2. 找出python3.11的动态库路径

python3.11 -c 'import random as m;print(m.__file__)'

我的输出为:

/usr/local/lib/python3.11/random.py

3. 把python3.10的so文件复制到3.11的动态库里并修改版本号(把so文件名里的310改成311)

sudo cp /usr/lib/python3.10/lib-dynload/_sqlite3.cpython-310-x86_64-linux-gnu.so /usr/local/lib/python3.11/lib-dynload/_sqlite3.cpython-311-x86_64-linux-gnu.so

复制之后,验证效果:python3.11 -c 'import _sqlite3 as m;print(m.__file__)'

===========================================================

2016-12-08 系统red hat6.7 也即centos6.7 python3.5.2 安装 django 之后 创建project 以及 import sqlite3

都出现  No module named ‘_sqlite3′ 

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/Python-3.5.0/python350/lib/python3.5/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/opt/Python-3.5.0/python350/lib/python3.5/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *

解决:

1、yum -y install sqlite-devel

2、cd  Python-3.5.2       (python源码安装文件解压后的文件夹)

3、./configure --enable-loadable-sqlite-extensions --prefix=/opt/Python352     (--prefix可加可不加)

4、 make && make install

如果这几步还不行,就修改 Python-3.5.2文件夹里的setup.py文件以后,重复第三和第四步:

在 sqlite_inc_paths 中添加sqlite的include 路径
如:
        sqlite_inc_paths = [ '/usr/include',
                             '/usr/include/sqlite',
                             '/usr/include/sqlite3',
                             '/usr/local/include',
                             '/usr/local/include/sqlite',
                             '/usr/local/include/sqlite3',
                             '~/share/software/python/sqlite-3.6.20/include',     (~/share/software/python/sqlite-3.6.20是sqlite的安装路径)
                             '~/share/software/python/sqlite-3.6.20/include/sqlite3',
                           ]

二、如果是python2.7出现 import sqlite3 找不到 _sqlite模块的问题,就简单多了

1、# find / -name _sqlite*.so

/usr/lib64/python2.6/lib-dynload/_sqlite3.so

2、# whereis python2.7

python2: /usr/bin/python2.7 /usr/bin/python2 /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python2.7 /usr/local/bin/python2.7-config /usr/local/bin/python2 /usr/local/lib/python2.7 /usr/include/python2.6

3、cp /usr/lib64/python2.6/lib-dynload/_sqlite3.so /usr/local/lib/python2.7/lib-dynload/_sqlite3.so

ok,搞定!

### 解决 Python 中缺少 `_sqlite3` 模块的问题 当遇到 `ModuleNotFoundError: No module named &#39;_sqlite3&#39;` 的错误时,通常是因为 SQLite 库未正确安装或配置在操作系统上。以下是可能的原因以及解决方案: #### 可能原因分析 1. **SQLite 开发库缺失**:某些发行版的 Linux 默认不包含 SQLite 或其开发头文件。 2. **Python 编译时缺少依赖**:如果 Python 是从源码编译而来,在编译过程中如果没有SQLite 头文件,则不会链接 `_sqlite3` 模块[^1]。 3. **Windows 平台问题**:在 Windows 上,可能会因为环境变量设置不当或其他依赖项丢失而导致此问题。 --- #### 解决方案 ##### 方法一:重新安装 Python(适用于从源码构建的情况) 对于基于 Unix/Linux 的系统,可以尝试通过以下命令来确保所有必要的依赖已安装并重新编译 Python: ```bash sudo apt-get update && sudo apt-get install libsqlite3-dev sqlite3 build-essential ``` 之后删除现有的 Python 构建目录并重新执行编译过程: ```bash ./configure --enable-optimizations make && sudo make altinstall ``` 这一步会强制 Python 链接所需的 SQLite 动态库。 ##### 方法二:更新现有 Python 安装(无需重新编译) 如果不想重新编译整个 Python 环境,可以通过动态加载的方式解决问题。例如,在 Debian/Ubuntu 系统中运行如下命令即可恢复功能: ```bash sudo apt-get install libsqlite3-mod-sqlitefts5 ``` ##### 方法三:针对 Windows 用户的操作指南 在 Windows 下,该问题是由于 Microsoft Visual C++ Redistributable 不完整引起的。下载对应版本的 redistributable 文件包并完成安装可有效缓解此类情况[^2]: https://visualstudio.microsoft.com/zh-hans/downloads/#microsoft-visual-c-redistributable-for-visual-studio 另外确认 PATH 路径里包含了 Python 所需 DLLs 存储位置;比如 `%PYTHON_HOME%\DLLs\`. --- #### 测试修复效果 无论采用哪种方法,请务必验证修复成果。打开交互式解释器输入下面语句测试是否正常导入模块: ```python import sqlite3 print(sqlite3.sqlite_version) ``` 成功打印出版本号即表明问题已经得到妥善处理。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值