CentOS7升级Python版本

CentOS7中默认的Python版本为Python 2.7.5,但是在很多场景下我们需要Python3的版本支持。今天我们就一起来看看如何在CentOS7下升级Python版本并让CentOS7同时兼容Python2和Python3。

[root@ZabbixServer ~]# python
Python 2.7.5 (default, Aug  7 2019, 00:51:29) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python官方网站:https://www.python.org/
Python官方下载地址:https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
Python国内下载地址:https://cdn.npm.taobao.org/dist/python/3.6.4/Python-3.6.4.tgz

1、安装Python及依赖包

在开始安装之前我们需要先安装Python基础依赖包:

yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel

然后我们去上面的淘宝国内镜像地址下载安装包:

# 下载安装包
wget https://cdn.npm.taobao.org/dist/python/3.6.4/Python-3.6.4.tgz

# 解压安装包
tar -zxvf Python-3.6.4.tgz

# 编译安装Python
cd Python-3.6.4 && ./configure --prefix=/usr/local/python3 && make && make install

2、修改配置

关于Python的配置目前有两种方法:
1、直接创建Python3软链,利用命令 Python3 调用新版本python,与自带python不冲突;
2、覆盖现有Python,使其指向新安装的Python,利用命令 python 便可调用新版本python;
下面我们分别介绍这两种方法:

2.1、直接创建Python3软链

在/usr/bin路径下创建python3软链,指向已安装的python3

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

在/usr/bin路径下创建pip3软链,指向已安装的pip3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

配置完成之后,此时系统中存在两个python版本:命令 python 对应的仍是默认2.7版本;命令 python3 则对应新安装的3.6版本:

[root@ZabbixServer]# python
Python 2.7.5 (default, Aug  7 2019, 00:51:29) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit();
[root@ZabbixServer]# python3
Python 3.6.4 (default, Jun 15 2020, 16:17:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit();
[root@ZabbixServer]#

当然,我们通过 python3 -V 和 pip3 -V也可以查看对应版本了:

[root@ZabbixServer ~]# python3 -V
Python 3.6.4
[root@ZabbixServer ~]# pip3 -V
pip 9.0.1 from /usr/local/python3/lib/python3.6/site-packages (python 3.6)
[root@ZabbixServer ~]# 
2.2、覆盖现有Python

备份旧python与pip

 mv /usr/bin/python /usr/bin/python2_old
 mv /usr/bin/pip /usr/bin/pip2_old  #第三部分的文件名可根据本机版本修改

修改软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

然后我们就可以使用命令 python -V, pip -V查看版本啦。

3、故障修复

如果我们按照第二种方法覆盖现有Python之后,由于我们修改了python的版本,会导致一些依赖于旧版本的程序出现错误,如Yum,我们可以进行如下配置。在文件第一行,将Python修改为旧的版本号,此处添加2.7:

#!/usr/bin/python2.7
import sys
try:
    import yum
except ImportError:
    print >> sys.stderr, """\
......

修改完成之后在安装软件的时候仍然会报错:

[root@ZabbixServer ~]# yum install telnet 
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax
[root@ZabbixServer ~]#

还是因为python更换的原因, 我们依照上述操作方法修改文件即可:打开/usr/libexec/urlgrabber-ext-down 文件,将 #!/usr/bin/python 修改为 #!/usr/bin/python2.7

#! /usr/bin/python2.7
#  A very simple external downloader
#  Copyright 2011-2012 Zdenek Pavlas

如果其他工具或库如果在安装过程中也报类似错误,同法处理。此时系统仍存在两个python版本,但命令 python 对应的是新安装的3.6版本,命令 python2 才对应之前的默认2.7版本。

推荐文章