yum命令报错undefined symbol: CRYPTO_num_locks

问题描述

在执行yum update的时候,突然遇到如下问题:

-bash-4.2# yum update
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks

问题原因

出现这个错误是因为 yum 在执行时依赖的 Python 模块 pycurl 出现了问题,具体是 pycurl 模块与当前的 Python 版本不兼容,导致无法正常工作。pycurl.so 文件中缺少 CRYPTO_num_locks 符号,通常是 OpenSSL 和 Python 版本之间的兼容性问题。

这里牵涉系统多个重要环境的相互问题:gcc和openssl之间有影响,openssl又影响python,python会影响到yum。

解决办法

因为OpensSSL的问题,包括curl, wget命令都不好用了。只能直接下载pycurl,重新安装解决:

源码编译安装pycurl

下载https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.5.tar.gz
安装:

tar -zxvf pypcurl-7.43.0.5.tar.gz
cd pycurl-7.43.0.5
python setup.py build
sudo python setup.py install

安装完成后,验证 pycurl 是否正确安装。你可以通过 Python 命令行来测试:

python -c "import pycurl; print(pycurl.__version__)"

执行yum update, 仍然报错

No module named yum Please install a package which provides this module, or verify that the module is installed correctly. It’s possible that the above module doesn’t match the current version of Python, which is: 2.7.5 (default, Nov 12 2013, 16:18:42) [GCC 4.8.2 20131017 (Red Hat 4.8.2-1)] If you cannot solve this problem yourself, please go to the yum faq at: http://yum.baseurl.org/wiki/Faq

可能是系统存在多个版本的python,即有python2.x.x,又有python3.x.x。

但是yum必须使用python2.x.x。

方法是:执行如下命令找到系统中所有的python2.x.x版本:

find / -type f -executable -name 'python2*'

输出可能类似于这样:

/usr/bin/python2.6
/usr/bin/python2.7


对每一个,运行:

/usr/bin/python2.x

然后在弹出的提示中,输入:

>>> import yum

找到那个不报错的python,然后再运行如下命令,找到yum使用的python的路径:

cat `which yum` | head -1

输出结果可能是:

#!/usr/bin/python2

然后运行:

ln -s /usr/bin/python2.x /usr/bin/python2

用正常的python版本替换yum使用的python即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值