centos 7上,如何升级python到最新的版本?
0、背景说明
在centos 7上,默认安装出来的python是:2.7.5版本
[root@centos7 ~]# python --version Python 2.7.5
通过yum安装出来的,适合当前操作系统的,最新的python版本是:3.6.8
[root@centos7 ~]# python3 --version Python 3.6.8
这个时候,想要把python升级到最新的版本,该怎么操作?
本文介绍通过源码的方式,升级python3到最新的版本。
1、安装openssl
python3.11的源码编译,需要openssl 1.1版本以上
通过以下的步骤进行安装
- 查看当前主机的openssl版本
[root@centos7 ~]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017
是1.0.2的版本,需要进行升级到1.1.1版本
- 移除本机的openssl
yum remove -y openssl openssl-devel
- 移除之后,就没有openssl的命令了
[root@centos7 ~]# openssl version -bash: openssl: command not found [root@centos7 ~]#
- 下载openssl包
登录到openssl的官方网站,下载1.1.1最新版本的包
https://www.openssl.org/source/
通过以下的地址下载openssl包
https://www.openssl.org/source/openssl-1.1.1v.tar.gz
- 上传到服务器并解压
[root@centos7 ~]# ls -ltr total 9664 -rw-r--r-- 1 root root 9893443 Aug 24 02:06 openssl-1.1.1v.tar.gz [root@centos7 ~]# tar -zxf openssl-1.1.1v.tar.gz [root@centos7 ~]# ls -l total 9668 drwxrwxr-x 19 root root 4096 Aug 1 09:51 openssl-1.1.1v -rw-r--r-- 1 root root 9893443 Aug 24 02:06 openssl-1.1.1v.tar.gz [root@centos7 ~]#
- 查看openssl.conf文件的目录
[root@centos7 ~]# find /etc/ -name openssl.cnf -printf "%h\n" /etc/pki/tls
- 编译、安装
cd openssl-1.1.1v ./config \ --prefix=/usr/local/openssl \ --libdir=lib \ --openssldir=/etc/pki/tls # 修改为上面查到的openssl.conf所在的目录 make -j1 depend make -j8 make install_sw
- 更新共享库缓存
ldconfig
- 更新ssl配置,设置环境变量
tee /etc/profile.d/openssl.sh<<EOF export PATH=/usr/local/openssl/bin:\$PATH export LD_LIBRARY_PATH=/usr/local/openssl/lib:\$LD_LIBRARY_PATH EOF source /etc/profile.d/openssl.sh
- 查看openssl的版本
[root@centos7 ~]# openssl version OpenSSL 1.1.1v 1 Aug 2023 [root@centos7 ~]#
出现版本信息,说明安装成功。
2、安装依赖包
这些依赖包,在编译python源码的时候,会用到
yum install -y make cmake gcc bzip2-devel libffi-devel zlib-devel tk-devel readline-devel \ gdbm-devel sqlite-devel tkinter
3、下载python最新的源码包
登录下面的地址:
https://www.python.org/downloads/source/
下载到最新的源码包,这里的版本是3.11.4
下载地址:https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz
4、上传到服务器、解压
[root@centos7 ~]# ls -ltr total 25908 -rw-r--r-- 1 root root 26526163 Aug 23 22:13 Python-3.11.4.tgz [root@centos7 ~]# tar -zxf Python-3.11.4.tgz [root@centos7 ~]# ls -ltr total 25912 drwxr-xr-x 16 1000 1000 4096 Jun 6 18:16 Python-3.11.4 -rw-r--r-- 1 root root 26526163 Aug 23 22:13 Python-3.11.4.tgz [root@centos7 ~]#
5、编译、安装
- 设置环境变量
export CFLAGS="-I/usr/local/openssl/include" export LDFLAGS="-L/usr/local/openssl/lib -lssl -lcrypto" export CPPFLAGS="-I /usr/local/openssl/include"
其中,/usr/local/openssl是openssl的安装路径。
注意:这两个变量非常的关键,如果不设置,会影响到后面的编译过程。
- 进行编译、安装
cd Python-3.11.4 ./configure \ --with-openssl=/usr/local/openssl \ --with-openssl-rpath=auto \ --prefix=/usr/local/python-3.11.4 \ --enable-optimizations make # 如果make失败,再执行几次就好了。 make altinstall
- 安装之后,通过以下的命令查询python的安装
cd /usr/local/python-3.11.4/bin ./python3.11 --version
- 使用pip3安装软件包
cd /usr/local/python-3.11.4/bin ./pip3.11 install -i https://mirrors.aliyun.com/pypi/simple/ ansible
当出现下面的,可以通过pip3命令安装软件包时,说明pip可以正常的使用ssl模块。
6、修改软链接
默认的环境中,python3命令,还是指向python3.6
[root@centos7 bin]# which python3 /usr/bin/python3 [root@centos7 bin]# ls -l /usr/bin/python3 lrwxrwxrwx 1 root root 9 Dec 8 2022 /usr/bin/python3 -> python3.6 [root@centos7 bin]# [root@centos7 bin]# which pip3 /usr/bin/pip3 [root@centos7 bin]#
通过以下的命令,创建python3命令、pip3命令的软链接
rm -f /usr/bin/python3 rm -f /usr/bin/pip3 ln -s /usr/local/python-3.11.4/bin/python3.11 /usr/bin/python3 ln -s /usr/local/python-3.11.4/bin/pip3.11 /usr/bin/pip3
执行之后,查看python的命令
[root@centos7 ~]# python3 --version Python 3.11.4 [root@centos7 ~]# [root@centos7 ~]# pip3 --version pip 23.1.2 from /usr/local/python-3.11.4/lib/python3.11/site-packages/pip (python 3.11) [root@centos7 ~]#
python3命令已经升级到最新的版本3.11.4了。
升级成功。