系统环境:Centos 7.8
1. 问题场景
想在测试环境的 Linux 安装一个查看端口的软件:
yum install lsof
Oops!然后报错如下:
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
2. 原因分析
Google
开始 solo
,都说是 Python
的兼容性问题,需要修改为 Python 2.x
版本,不支持 Python 3.x
。但是那不应该呀,刚装完的时候是能用的,后来沟通才发现是有人折腾过 Python 3.x
,因为某些软件必须 Python 3.x
才能使用。
经过对比发现,在
Centos 7.x
版本中,yum
使用的Python
版本都是2.x
的(也是系统默认的),到了Centos 8
及之后yum
使用的才是3.x
版本(同时也是系统默认)。
【注】Python
2
与 3
是劝退并不学 Python
的原因,等 Golang
玩的差不多了,到时候估计也要搞搞 Python
了,卷起来!!!
3. 解决方案
3.1 仅解决 yum 的问题
此方法适用于 Centos 7
上有重要程序需要依赖 Python 3.x
的场景,否则就会导致程序不能正常使用。但是这仅仅是解决了 yum
的使用,如果有其他系统软件必须 Python 2.x
的话,那就只能遇到一个改一个;但是一般来说常用的也就那几个命令,服务器跑的好好的一般没人折腾它,哈哈。
But, 如果的确需要折腾服务器,而安装的依赖于 Python 3.x
的程序并不是说特别重要,可以参考 方法 3.2
的方法,直接修改环境变量将系统的 Python
版本指定为 2.x
。
修改 yum 文件
vim /usr/bin/yum
#!/usr/bin/python
import sys
try:
import yum
except ImportError:
....
....
[root@localhost system]# py # 按 Tab 键,提示系统中已经安装的 Python。
pydoc python2 python2.7-config python-config
python python2.7 python2-config
=>>>> 因为 python
已经被指向 python 3.x
,所以这里直接指定 python
版本为 2.x
;
#!/usr/bin/python2.7
import sys
try:
import yum
except ImportError:
....
....
修改 urlgrabber-ext-down 文件
因为 yum update/install
等命令会涉及到外部下载东西,所以还需要修改 urlgrabber-ext-down
,只修改 yum
的话,该命令也会报错。
操作方法与修改 yum
文件一样,替换掉顶部的 Python
版本。
vim /usr/libexec/urlgrabber-ext-down
#! /usr/bin/python
# A very simple external downloader
# Copyright 2011-2012 Zdenek Pavlas
....
....
=>>>> 修改如下(确保系统变量中有相应的环境变量):
vim /usr/libexec/urlgrabber-ext-down
#! /usr/bin/python2.7
# A very simple external downloader
# Copyright 2011-2012 Zdenek Pavlas
....
....
收工!!!
3.2 修改系统环境变量
方法 3.1
方法和本方法都可以解决问题,请根据实际场景选择即可。
# 进入 /usr/bin 目录
cd /usr/bin
# 查看默认 python 对应的软链接
ll | grep python
# 因为被人改过,所有这里指向了 python 3.x 版本
lrwxrwxrwx. 1 root root 38 Feb 21 09:40 python -> /home/module/python-3.8.15/bin/python3
lrwxrwxrwx. 1 root root 9 Jun 12 2020 python2 -> python2.7
-rwxr-xr-x. 1 root root 7144 Apr 2 2020 python2.7
lrwxrwxrwx. 1 root root 38 Feb 21 09:25 python3 -> /home/module/python-3.8.15/bin/python3
操作也比较简单,直接删除原有软链接,并新建一个指向 python 2.x
的软链接即可,因为 Centos 7.8
已经有默认的 Python
了,所以直接指向已有的即可。
rm /usr/bin/python
ln -s /usr/bin/python2.7 /usr/bin/python
ll | grep python
lrwxrwxrwx. 1 root root 38 Feb 21 09:40 python -> python2.7
lrwxrwxrwx. 1 root root 9 Jun 12 2020 python2 -> python2.7
-rwxr-xr-x. 1 root root 7144 Apr 2 2020 python2.7
lrwxrwxrwx. 1 root root 38 Feb 21 09:25 python3 -> /home/module/python-3.8.15/bin/python3
这样就可以了,系统环境默认使用的是 python
(python 2.x
) 版本,如果需要使用 python 3.x
的软件直接修改为 python3
即可(如果没有则需要创建一个 python3
的软链接),