升级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依赖包的支持

 

## 安装依赖,并重新编译python
yum install libffi-devel -y

 

posted @ 2023-11-07 09:45  傲气雄鹰  阅读(307)  评论(0编辑  收藏  举报