ModuleNotFoundError: No module named ‘_sqlite3‘

47 篇文章 1 订阅

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,搞定!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值