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版本以上
通过以下的步骤进行安装
[root@centos7 ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
是1.0.2的版本,需要进行升级到1.1.1版本
yum remove -y openssl openssl-devel
[root@centos7 ~]# openssl version
-bash: openssl: command not found
[root@centos7 ~]#
登录到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 ~]#
[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
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
[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
cd /usr/local/python-3.11.4/bin
./python3.11 --version
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了。
升级成功。