前言
近期跑的一个项目要用到python3.10+,但是Centos-Stream源里现在最高也才3.9,无奈只能尝试编译安装,本来想着应该很简单分分钟搞定,但是没想到编译过程中遇到的问题居然还挺多的,我记忆力不太好,还是写篇备忘吧
0x01 编译过程
# 安装依赖项
dnf -y install make gcc zlib-devel libffi-devel readline-devel sqlite-devel openssl-devel
#下载python源码包并解压进入工作目录
wget https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgz
extract Python-3.10.9.tgz
cd Python-3.10.9
# 开始编译并安装
./configure --enable-optimizations --enable-ipv6 --with-openssl=/usr --enable-loadable-sqlite-extensions
# 这里就有两个坑,第一个坑是openssl,这里我使用的openssl库是包管理器安装的,
# 非编译安装所以目录参数一定要是/usr,不然编译的时候虽然py不会有任何错误提示,
# 但是正式使用的时候pip会报错:
# WARNING: pip is configured with locations that require TLS/SSL,
# however the ssl module in Python is not available
# 第二个坑就是sqlite了,一定记住要加--enable-loadable-sqlite-extensions
# 开启sqlite3支持,不加会导致所有序要用到sqlite3的程序都报错
# No module named '_sqlite3',现在用sqlite3的程序挺多的,要是你的程序不需要
# 加不加都无所谓
# ps:有的人可能会问我为什么不加--prefix参数定义py的安装目录方便管理,这里
# 说一下原因:因为RHEL系的发行版都支持alternatives来管理不同版本的程序包,
# 可以很方便的切换多版本的程序,稍后会写怎么使用,要是Debian系还是加上这个参数吧
make -j8
make install
0x02 使用alternatives管理python默认版本
# 安装编译好的python,使alternatives能够管理
alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 3
# 这里解释一下命令组成:alternatives --install <链接> <名称> <路径> <编号>
# 这里编号我使用的是3因为我的系统里还有3.6和3.9,分别对应1和2,如果你有更少或
# 更多的程序版本可以自行调整编号
# 设置python默认版本
alternatives --set python3 /usr/local/bin/python3.10
# 也可以使用交互式命令手动选择
alternatives --config python3
# 以上两条命令任选其一即可,且会根据切换的py版本自动切换pip版本
# 无需复杂的软连接,要是序要其他版本也可再次通过alternatives切换回去
Comments NOTHING