升级linux下的python版本(3.10.11)
以centos7为例 将python升级到3.10.11
一、安装必备软件包
## 第一步 基础包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel libpcap-devel xz-devel libffi-devel gcc
## 第二步 安装db4-devel,必先安装epel-release
yum install epel-release
yum install db4-devel
二、安装与python3.10.11兼容的openssl版本(注:未提前安装会报如下错误),官方说是1.1.1或者更高的版本都可以,这里以openssl3.0.0为例
1、下载源码并解压到指定目录
wget --no-check-certificate https://www.openssl.org/source/openssl-3.0.0.tar.gz tar -zxf openssl-3.0.0.tar.gz -C /opt/tools/
2、编译安装openssl
## 安装perl-podlators,openssl高版本依赖pod2man命令,需要提前安装
yum install perl-podlators
./config --prefix=/usr/local/openssl make -j && make install
如上错误,若没有perl,则需要先安装perl
2.1 安装prel 所需的依赖
yum install readline-devel pcre-devel openssl-devel gcc
2.2 下载perl源码,进行编译安装,以 perl 5.28.1 为例
## 下载源码
wget http://www.cpan.org/src/5.0/perl-5.28.1.tar.gz
tar -zxf perl-5.28.1.tar.gz /opt/tools/
## 编译配置 ./Configure -des -Dprefix=/usr/local/perl
## 编译安装
make && make install
## 查看安装完成后的版本
perl -v
3、继续编译安装openssl,完成之后,查看opessl安装目录(/usr/local/openssl),若只有lib64,没有lib目录时,需要从lib64拷贝一份
cp -r lib64/ lib
4、查看安装后openssl版本,得到如下错误
两种解决方案:
第一种 执行以下命令即可:
ln -s /usr/local/openssl/lib/libssl.so.3 /usr/lib/libssl.so.3 ln -s /usr/local/openssl/lib/libcrypto.so.3 /usr/lib/libcrypto.so.3 echo "/usr/local/openssl/lib" >> /etc/ld.so.conf ldconfig
第二种 更新共享库缓存:运行以下命令更新共享库缓存,这将刷新系统的共享库缓存,使系统能够正确找到和加载共享库
sudo ldconfig
再次检查库文件路径,运行以下命令检查库文件路径
ldconfig -p | grep libssl.so.3
如果没有输出或找不到该库文件,直接通过find 查找看是否有
find / -name libssl.so.3
若查找到了,则将它添加到共享库文件中,即编辑 /etc/ld.so.conf
文件并添加共享库文件所在的目录。例如,在文件中添加一行
## 添加对应libssl.so.3所在目录 /usr/local/openssl/lib ## 再次刷新共享库缓存 sudo ldconfig
注:以上只能用lib下的文件数据,不能用lib64,因为python3.10.11 编译源码中,还是引用的lib包里面的数据/usr/local/openssl/lib,若没有lib,则python能编译完成,但pip安装软件无法使用,会出现ssl报错问题
再次执行时可正常输出
5、替换老版本的 openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
三、上述准备工作完成后,开始下载python3.10.11,并解压到指定目录/opt/tools,进行编译安装
wget --no-check-certificate https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz tar -zxf Python-3.10.11.tgz -C ./
##编译配置
./configure --prefix=/usr/local/python3.10 --with-openssl=/usr/local/openssl --with-openssl-rpath=auto
##编译安装
make -j && make install
##创建python3软链接
ln -s /usr/local/python3.10/bin/python3.10 /usr/bin/python3
python3 --version
如上图所示,编译安装Pyhon3.10.11 已完成
创建软链接,设置全局环境可用
ln -s /usr/local/python3.10/bin/python3.10 /usr/bin/python3
ln -s /usr/local/python3.10/bin/pip3 /usr/bin/pip3
四、上述安装各软件包可能出现错误,及解决办法
1、编译安装openssl时,可能出现如下
解决:安装perl-podlators
yum install perl-podlators
2、遇到Can`t locate IPC/Cmd.pm时
解决办法:安装perl-CPAN
yum install -y perl-CPAN ## 进入shell内部命令行 perl -MCPAN -e shell
## 先回车,更新再执行后续步骤 ## 执行安装 cpan[1]> install IPC/Cmd.pm
3、pip安装软件时,会出现没有内置_ctypes模块错误,需要libffi-devel依赖包的支持
## 安装依赖,并重新编译pythonyum install libffi-devel -y