Centos 使用 yum 命令报错:File “/usr/bin/yum“, line 30 ……. SyntaxError: invalid syntax

系统环境: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 23 是劝退并不学 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

这样就可以了,系统环境默认使用的是 pythonpython 2.x) 版本,如果需要使用 python 3.x 的软件直接修改为 python3 即可(如果没有则需要创建一个 python3 的软链接),

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注