如何编译带SQLite3的Python3.10以解决Jupyter运行报错问题
解决Python 3.10 + Jupyter 缺少sqlite3的问题
我通过以下命令安装了Python 3.10:
me@mydevice:~$ sudo add-apt-repository ppa:deadsnakes/ppa me@mydevice:~$ sudo apt update me@mydevice:~$ sudo apt install python3.10
创建虚拟环境并安装Jupyter后,无法启动Jupyter,提示找不到sqlite3。
具体报错信息
第一次报错(保留原try-except逻辑):
Traceback (most recent call last): File "/home/project_path/venv/bin/jupyter-notebook", line 5, in <module> from notebook.app import main File "/home/project_path/venv/lib/python3.10/site-packages/notebook/app.py", line 17, in <module> from jupyter_server.serverapp import flags File "/home/project_path/venv/lib/python3.10/site-packages/jupyter_server/serverapp.py", line 95, in <module> from jupyter_server.gateway.managers import ( File "/home/project_path/venv/lib/python3.10/site-packages/jupyter_server/gateway/managers.py", line 30, in <module> from ..services.sessions.sessionmanager import SessionManager File "/home/project_path/venv/lib/python3.10/site-packages/jupyter_server/services/sessions/sessionmanager.py", line 17, in <module> from pysqlite2 import dbapi2 as sqlite3 # type:ignore[no-redef] ModuleNotFoundError: No module named 'pysqlite2'
查看sessionmanager.py的导入逻辑:
try: import sqlite3 except ImportError: # fallback on pysqlite2 if Python was build without sqlite from pysqlite2 import dbapi2 as sqlite3 # type:ignore[no-redef]
移除try-except仅保留import sqlite3后,报错:
File "/home/project_path/venv/lib/python3.10/site-packages/jupyter_server/services/sessions/sessionmanager.py", line 14, in <module> import sqlite3 File "/usr/lib/python3.10/sqlite3/__init__.py", line 57, in <module> from sqlite3.dbapi2 import * File "/usr/lib/python3.10/sqlite3/dbapi2.py", line 27, in <module> from _sqlite3 import * ImportError: /usr/lib/python3.10/lib-dynload/_sqlite3.cpython-310-x86_64-linux-gnu.so: undefined symbol: sqlite3_trace_v2
尝试pip install pysqlite、pip install sqlite3等命令均无法找到匹配包,需要编译带sqlite3的Python 3.10。
编译带sqlite3的Python 3.10步骤
1. 卸载现有PPA安装的Python 3.10
移除通过deadsnakes安装的版本,避免冲突:
sudo apt purge python3.10 sudo apt autoremove sudo apt clean
2. 安装编译依赖
安装编译Python所需的基础工具和sqlite3开发库:
sudo apt update sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget libsqlite3-dev
其中libsqlite3-dev是确保Python编译时能链接sqlite3的关键依赖。
3. 下载Python 3.10源码
以3.10.12版本为例,可替换为最新的3.10.x稳定版:
wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz tar -xf Python-3.10.12.tgz cd Python-3.10.12
4. 配置编译选项
指定编译参数,强制启用sqlite3集成:
./configure --enable-optimizations --with-sqlite3
--enable-optimizations:开启编译优化,提升Python运行性能--with-sqlite3:强制链接系统sqlite3库,确保集成生效
5. 编译并安装
根据CPU核心数调整-j参数(比如4核用-j4),加快编译速度:
make -j$(nproc) sudo make altinstall
用altinstall避免覆盖系统默认Python版本。
6. 验证sqlite3集成
运行以下命令确认Python已正确集成sqlite3:
python3.10 -c "import sqlite3; print(sqlite3.sqlite_version)"
若能正常打印sqlite版本号,说明集成成功。
7. 重新配置虚拟环境与Jupyter
用编译好的Python 3.10创建虚拟环境并安装Jupyter:
python3.10 -m venv /home/project_path/venv source /home/project_path/venv/bin/activate pip install jupyter
启动Jupyter验证:
jupyter notebook
内容的提问来源于stack exchange,提问作者rosecabbagedragon
相关产品推荐
相关产品推荐

