Python 3.11自定义安装后缺失默认模块(如_sqlite3)求助
自定义编译Python 3.11缺失_sqlite3模块的解决方案
问题说明
尝试导入Python 3.11默认模块sqlite3时触发缺失错误,具体报错如下:
Python 3.11.0 (main, Jan 12 2023, 03:19:52) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/user_name/opt/Python-3.11.0/lib/python3.11/sqlite3/__init__.py", line 57, in <module> from sqlite3.dbapi2 import * File "/home/user_name/opt/Python-3.11.0/lib/python3.11/sqlite3/dbapi2.py", line 27, in <module> from _sqlite3 import * ModuleNotFoundError: No module named '_sqlite3'
背景信息
- 环境:Dreamhost VPS(Ubuntu 20.04.5),无sudo权限,系统全局Python版本为3.8
- 自定义安装Python 3.11的步骤:
cd /home/user_name/optwget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgztar zxvf Python-3.11.0.tgzcd Python-3.11.0./configure --prefix=$HOME/opt/Python-3.11.0makemake install
- 编译
make阶段已提示_sqlite3等模块因依赖缺失未编译,搭建venv后触发上述错误。
已尝试无效方法
- 从系统Python 3.8复制
_sqlite3相关文件到Python 3.11的lib-dynload目录并改名,导致导入时出现段错误 - 添加
--enable-loadable-sqlite-extensions参数重新编译Python,问题未解决
有效解决方案
由于无sudo权限无法安装系统级sqlite3开发依赖,需自行编译sqlite3并让Python编译时链接该私有版本,步骤如下:
1. 编译安装私有sqlite3
- 进入用户opt目录:
cd $HOME/opt - 下载sqlite3源码包(可替换为最新稳定版):
wget https://www.sqlite.org/2023/sqlite-autoconf-3440000.tar.gz - 解压源码:
tar zxvf sqlite-autoconf-3440000.tar.gz - 进入解压后的目录:
cd sqlite-autoconf-3440000 - 配置编译路径到用户私有目录:
./configure --prefix=$HOME/opt/sqlite3 - 编译:
make - 安装:
make install
2. 重新编译Python 3.11并链接私有sqlite3
- 回到Python 3.11源码目录:
cd $HOME/opt/Python-3.11.0 - 清理之前的编译残留:
make clean - 配置编译参数,指定sqlite3的私有安装路径:
./configure --prefix=$HOME/opt/Python-3.11.0 --with-sqlite3=$HOME/opt/sqlite3 - 重新编译:
make - 重新安装:
make install
3. 验证
进入Python 3.11环境执行import sqlite3,若无报错则问题解决。
内容的提问来源于stack exchange,提问作者Ignacio Frizzera
相关产品推荐
相关产品推荐

