python3.13报错ModuleNotFoundError: No module named '_sqlite3'
问题描述
如题,用python3.13使用diskcache的时候提示没有sqlite3,而众所周知,sqlite3是不可以通过pip单独安装的,必须在编译python的时候安装进去,于是开始寻找解决方案。
尝试
在网上找到有关这部分问题的解决方案,虽然没有用,但还是记录一下。
yum install sqlite-devel(已经安装了)- configure命令加上
--enable-loadable-sqlite-extensions(已经加上了) - 拷贝python2的sqlite动态库到python3.13路径下的lib,
cp /usr/lib64/python2.7/lib-dynload/_sqlite3.so /usr/local/python3.13.2/lib/python3.13/lib-dynload/_sqlite3.so(报了别的错,ImportError: dynamic module does not define module export function (PyInit__sqlite3)) - 修改setup.py(python3.13的源码下没有setup.py这个文件)
解决办法
虽然configure命令的输出中提示checking for stdlib extension module _sqlite3... missing,但是查看config.log可以看到有关sqlite3具体的问题:Requested 'sqlite3 >= 3.15.2' but version of SQLite is 3.7.17,conftest.c:151:12: error: #error "SQLite 3.15.2 or higher required"。也就是说,并不是找不到sqlite3,而是sqlite3的版本太低了。那么解决办法也就显而易见了。
- 下载sqlite3,https://www.sqlite.org/download.html 。然后走正常编译安装流程
./configure --prefix=/usr/local/sqlite3 --fts4。 【注意:加上这个--fts4编译参数很重要,不然后面编译python时test_sqlite3会失败】 - 将新安装的sqlite3添加到动态库搜索路径里:
vim ~/.bashrc
export LD_LIBRARY_PATH="/usr/local/sqlite3/lib":$LD_LIBRARY_PATH # 添加/usr/local/sqlite3/lib到环境变量LD_LIBRARY_PATH中,此处为示例
source ~/.bashrc
注:这种方式日常使用是没问题的,但是在一些意想不到的场景会报找不到动态库的错(例如mcp client启动server端还需要在StdioServerParameters中手动添加env参数),因此可以参考以下方法添加到系统共享库缓存中:
echo "/usr/local/sqlite3/lib/" | sudo tee /etc/ld.so.conf.d/sqlite3.conf
sudo ldconfig
ldconfig -p | grep sqlite3 # 如果有添加的路径即为成功
- 重新编译安装python3.13,在configure前设置环境变量:
export CFLAGS="-I/usr/local/sqlite3/include"
export LDFLAGS="-L/usr/local/sqlite3/lib"
./configure --prefix=/usr/local/python3.13.2/ --enable-optimizations --enable-loadable-sqlite-extensions
make -j8 && make altinstall
- 验证编译python成功:
/usr/local/python3.13.2/bin/python3.13 -c "import sqlite3; print(sqlite3.sqlite_version)",如果能输出sqlite3的正确版本号,那么接下来就可以设置软链接愉快地使用了。

浙公网安备 33010602011771号