RHEL 7.1中yum命令报错:pycurl库SSL后端不匹配问题求助
解决RHEL7.1中yum因Python升级和pycurl不兼容导致的报错问题
这问题我在维护RHEL7服务器时碰到过好多次,核心原因是RHEL7的yum完全依赖Python2.7运行,你升级Python3.6后破坏了yum的依赖环境,再加上第三方安装的pycurl和系统libcurl的SSL后端不匹配,直接导致yum无法正常导入必要模块。下面是具体的解决步骤:
1. 先让yum恢复基本运行能力
因为yum默认会调用系统的python命令,而你可能已经把默认Python切换成了3.6,这会让yum直接跑在不兼容的Python3环境里。我们需要强制yum使用Python2.7:
- 编辑yum主脚本:
将第一行的vi /usr/bin/yum#!/usr/bin/python修改为#!/usr/bin/python2.7,保存退出。 - 还要修改urlgrabber的辅助脚本:
同样把第一行的vi /usr/libexec/urlgrabber-ext-down#!/usr/bin/python改成#!/usr/bin/python2.7。
现在你再运行yum命令,应该能避免Python版本不兼容的问题,但还需要解决pycurl的SSL后端冲突。
2. 修复pycurl的SSL后端不匹配问题
你从第三方网站更新的pycurl,编译时使用的SSL后端和系统libcurl默认的openssl不一致,导致yum调用Python2的pycurl时出错。我们需要清理第三方安装的pycurl,重新安装系统自带的版本:
- 先卸载所有通过pip安装的pycurl(不管是Python2还是Python3版本):
pip2 uninstall -y pycurl pip3 uninstall -y pycurl - 用yum重新安装系统适配的pycurl包:
这个包是RHEL官方编译的,会和系统的libcurl(openssl后端)完全匹配。yum reinstall pycurl
3. 避免后续再出现类似问题
- 不要把Python3.6设为系统默认的
python命令,RHEL7的很多系统工具(包括yum)都依赖Python2.7。如果需要用Python3,直接调用python3命令即可。 - 如果之前用
update-alternatives设置过Python的默认版本,建议把Python2.7设为优先级更高的选项:
然后选择对应Python2.7的序号即可。update-alternatives --config python
完成以上步骤后,yum应该就能正常运行了,后续使用Python3时也不会再影响系统工具的正常工作。
内容的提问来源于stack exchange,提问作者Karthikeyan
相关产品推荐
相关产品推荐

