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-优快云博客
===========
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,搞定!