场景
刚升级完 Python 3,尝试通过 yum 安装 epel-release 依赖时直接报错。执行命令如下:
yum install -y epel-release
终端输出类似这样的异常:
Downloading packages:
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
SyntaxError: invalid syntax
原因分析
这个错误的核心在于Python 版本不兼容。系统底层包管理器(yum)调用的脚本文件 urlgrabber-ext-down 仍沿用旧版 Python 2 的语法规范,而你的环境已经切换到了 Python 3。
具体来说,Python 2 允许使用 except ExceptionType, variable: 这种写法,但在 Python 3 中这是非法的,必须改为 except ExceptionType as variable:。由于脚本的第一行 Shebang 没有指向正确的解释器,或者解释器本身已更新但脚本未适配,导致解析失败。
除非你两个文件都是错误的,否则需要确保脚本使用的解释器与系统当前兼容的 Python 版本一致。通常建议回退到稳定的 Python 2.7 环境来维持系统工具的正常运转。
解决方案
我们需要手动修改该脚本的首行声明,强制其使用 Python 2.7 解释器。
-
备份原文件(操作前务必小心)
cp /usr/libexec/urlgrabber-ext-down /usr/libexec/urlgrabber-ext-down.bak -
编辑文件 使用 vim 打开文件:
vim /usr/libexec/urlgrabber-ext-down -
修改 Shebang 将第一行修改为指向 python2.7。如果不确定路径,可以用
which python2.7确认。#!/usr/bin/python2.7 -
保存退出并验证 再次尝试安装,看是否恢复正常:
yum install -y epel-release
注意事项
- 修改系统级脚本存在风险,操作前务必备份。
- 确保系统中确实安装了
python2.7,否则修改后依然无法运行。 - 如果后续有权限问题,可能需要添加执行权限
chmod +x /usr/libexec/urlgrabber-ext-down。
搞定之后,pip 相关的依赖安装流程应该就能顺畅跑通了。

