如何升级CentOS7中Python3.6.4所使用的SQLite3版本?
嘿,我太懂你这种明明系统SQLite升级了,但Python还死抱着老版本不放的憋屈了!其实问题根源很简单——Python的sqlite3模块是编译时静态绑定的,不是运行时动态调用系统库的,所以你光升级系统里的SQLite没用,得让Python在编译的时候就链接上新的SQLite版本才行。下面给你一步步说CentOS7上的具体操作:
为什么Python没用到新SQLite?
咱们平时用的Python sqlite3模块,是在Python编译的时候直接把SQLite的代码打包进去的,不是运行时去读系统里的libsqlite3.so。所以你哪怕把系统SQLite更到最新,已经编译好的Python还是会用它自己打包的老版本,必须重新编译Python才能切换。
具体解决步骤(CentOS7专属)
第一步:确保新SQLite正确安装(如果还没弄好的话)
先把SQLite 3.23.1装到非系统默认路径,避免覆盖系统自带的3.7.17(系统很多工具比如yum都依赖老版本,绝对不能乱替换):
# 下载对应版本的源码包 wget https://www.sqlite.org/2018/sqlite-autoconf-3230100.tar.gz # 解压 tar zxvf sqlite-autoconf-3230100.tar.gz cd sqlite-autoconf-3230100 # 指定安装路径为/usr/local/sqlite3,避免干扰系统库 ./configure --prefix=/usr/local/sqlite3 # 编译安装 make && make install
第二步:重新编译Python 3.6.4,链接新SQLite
这一步是核心,要让Python在编译时找到咱们新装的SQLite:
- 先装全Python编译需要的依赖:
yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
- 下载Python 3.6.4的源码:
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz tar zxvf Python-3.6.4.tgz cd Python-3.6.4
- 配置编译参数,重点指定SQLite的头文件和库路径:
./configure --prefix=/usr/local/python36 \ LDFLAGS="-L/usr/local/sqlite3/lib" \ CPPFLAGS="-I/usr/local/sqlite3/include"
这里--prefix是你要把Python装到的路径,可根据自己需求修改。
4. 编译并安装:
make && make install
- 替换系统的
python3链接(如果需要让全局python3指向新编译的版本):
ln -sf /usr/local/python36/bin/python3 /usr/bin/python3
第三步:验证结果
打开Python3终端,执行:
import sqlite3 print(sqlite3.sqlite_version)
这下应该能看到3.23.1的输出啦!
重要提醒
- 绝对不要卸载系统自带的SQLite 3.7.17,CentOS7的核心组件依赖它,卸载会导致系统崩溃。
- 如果你的Python是用
yum装的,那肯定是绑定系统老SQLite的,必须用源码编译的方式才能切换到新SQLite。 - 编译时如果报错,先检查依赖有没有装全,或者SQLite的路径是不是写错了。
内容的提问来源于stack exchange,提问作者Yano
相关产品推荐
相关产品推荐

