如何解决Python虚拟环境中的sqlite依赖版本过低问题
问题1:virtualenv关联新版sqlite的最优方案
你系统自带的sqlite3 3.7.17版本远低于Matrix Synapse要求的最低版本,且不能直接替换系统sqlite避免影响其他系统服务,按以下步骤操作即可:
- 第一步:编译安装独立的新版sqlite到自定义路径,不要覆盖系统默认版本
# 从sqlite官方下载对应版本的源码包,以3.41.0版本为例 tar zxf sqlite-autoconf-3410000.tar.gz cd sqlite-autoconf-3410000 ./configure --prefix=/opt/sqlite3 make && make install
- 第二步:激活你的Matrix Synapse对应的virtualenv,执行以下命令强制编译pysqlite3并链接新版sqlite
source /path/to/your/virtualenv/bin/activate LD_RUN_PATH=/opt/sqlite3/lib CFLAGS="-I/opt/sqlite3/include" pip install pysqlite3 --no-binary :all:
- 可选配置:如果需要让虚拟环境内Python标准库的sqlite3模块也默认调用新版sqlite,可在虚拟环境的
bin/activate脚本末尾添加如下行,后续每次激活环境自动生效
export LD_LIBRARY_PATH=/opt/sqlite3/lib:$LD_LIBRARY_PATH
问题2:验证virtualenv内sqlite版本的方法
激活目标virtualenv后,执行对应命令即可查询实际加载的sqlite版本:
- 验证pysqlite3关联的sqlite版本:
python -c "import pysqlite3; print('pysqlite3 链接的sqlite版本:', pysqlite3.sqlite_version)"
- 验证Python标准库sqlite3模块关联的sqlite版本:
python -c "import sqlite3; print('标准库sqlite3链接的版本:', sqlite3.sqlite_version)"
输出的版本号与你编译安装的新版sqlite版本一致即代表配置生效。
内容的提问来源于stack exchange,提问作者Lech Rzedzicki
相关产品推荐
相关产品推荐

