最近在自己的一台开发机器上需要用到yum,但是遇到了no module name yum的报错,在网上查了大量资料,很长时间都没有解决,十分苦恼。
本质上,yum是用python实现的,如果/usr/bin/yum中配的python地址不能正确import yum的话就会导致上述问题。
网上一般的解决办法是说python版本升级导致了这个问题,只要通过whereis python命令找到yum支持的原有的python版本,2.6也好,2.4也好不同机器不一样,然后修改/usr/bin/yum中关于python的配置即可。但是情况往往没有这么简单,我的机器可能早就没有可支持yum的python的版本了,我尝试了重新安装可能支持的python版本,但是徒劳。如果可以通过前面简单的配置解决的话,可以随便找到一个详细的教程,不在此文讨论范围。
最后干脆直接重新安装python和yum,推倒重来也许是最有效的方法。但是首先需要卸载和删除本机所有的python和yum,注意包括anaconda之类的也要卸载,因为如果不卸载后续可能出现类似rpm: /root/workspace/cxy/anaconda2/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)这样的问题。
删除现有的python
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联
whereis python |xargs rm -frv -rf ##删除所有残余文件 ##xargs,允许你对输出执行其他某些命令
whereis python ##验证删除,返回无结果
删除现有的yum
rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps
whereis yum |xargs rm -frv -rf
下载所需的RPM包
下载地址如下:http://mirrors.163.com/centos/7/os/x86_64/Packages/
这里的包的版本可能会更新,我只列出我下载的时候所需的版本,直接wget相应的包链接即可
python-2.7.5-76.el7.x86_64.rpm
python-chardet-2.2.1-1.el7_1.noarch.rpm
python-devel-2.7.5-76.el7.x86_64.rpm
python-iniparse-0.4-9.el7.noarch.rpm
python-kitchen-1.1.1-5.el7.noarch.rpm
python-libs-2.7.5-76.el7.x86_64.rpm
python-pycurl-7.19.0-19.el7.x86_64.rpm
python-setuptools-0.9.8-7.el7.noarch.rpm
python-urlgrabber-3.10-9.el7.noarch.rpm
yum-3.4.3-161.el7.centos.noarch.rpm
yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
yum-plugin-aliases-1.1.31-50.el7.noarch.rpm
yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
yum-plugin-protectbase-1.1.31-50.el7.noarch.rpm
yum-utils-1.1.31-50.el7.noarch.rpm
修改文件名
mv python-setuptools-0.9.8-7.el7.noarch.rpm python-setuptools-0.9.8-7.el7.noarch
mv yum-utils-1.1.31-50.el7.noarch.rpm yum-utils-1.1.31-50.el7.noarch
mv yum-plugin-aliases-1.1.31-50.el7.noarch.rpm yum-plugin-aliases-1.1.31-50.el7.noarch
安装
rpm -Uvh --replacepkgs python*.rpm
rpm -Uvh --replacepkgs rpm-python*.rpm yum*.rpm
可能会遇到如下问题:
libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by python-libs-2.7.5-76.el7.x86_64
这个就需要更新openssl
首先通过rpm -qa | grep openssl查看版本:
openssl-1.0.1e-42.el7.9.x86_64
openssl098e-0.9.8e-29.el7.centos.2.x86_64
openssl-libs-1.0.1e-42.el7.9.x86_64
然后通过下面命令:
rpm -q --provides openssl-libs | grep libcrypto.so.10
libcrypto.so.10()(64bit)
libcrypto.so.10(OPENSSL_1.0.1)(64bit)
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit)
libcrypto.so.10(libcrypto.so.10)(64bit)
接着从刚才下载包的网站下载:
openssl-1.0.2k-16.el7.x86_64.rpm
openssl-libs-1.0.2k-16.el7.x86_64.rpm
并安装:rpm -Uvh --replacepkgs openssl-*.rpm
此时rpm -q --provides openssl-libs | grep libcrypto.so.10
libcrypto.so.10()(64bit)
libcrypto.so.10(OPENSSL_1.0.1)(64bit)
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit)
libcrypto.so.10(OPENSSL_1.0.2)(64bit)
libcrypto.so.10(libcrypto.so.10)(64bit)
如果遇到rpm >= 0:4.11.3-22 is needed by yum-3.4.3-161.el7.centos.noarch
则是rpm的版本过老,需要更新RPM,下载的包如下:
rpm-4.11.3-35.el7.x86_64.rpm
rpm-build-4.11.3-35.el7.x86_64.rpm
rpm-build-libs-4.11.3-35.el7.x86_64.rpm
rpm-libs-4.11.3-35.el7.x86_64.rpm
rpm-python-4.11.3-35.el7.x86_64.rpm
rpm-sign-4.11.3-35.el7.x86_64.rpm
安装更新:rpm -Uvh --replacepkgs rpm*.rpm
最后再尝试:rpm -Uvh --replacepkgs rpm-python*.rpm yum*.rpm
最终在python交互界面测试import yum,如果成功即大功告成。