最近在alibaba cloud linux出现了这个错误 由于阿里的linux是兼容centos的 所以直接按照centos来处理。
出现原因:把自带的python2.7删除后 又重新安装
删除python2.7
(下面为个人复现错误步骤 请勿轻易按照删除)
1.卸载python(防止未卸载干净)
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps #强制删除已安装程序及其关联
whereis python|xargs rm -frv #删除所有残余文件 #xargs,允许你对输出执行其他某些命令
2.卸载yum
rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps
rm -rf /etc/yum.repos.d/*
whereis yum|xargs rm -frv
3.验证是否删除干净
whereis python #验证删除,没有结果返回
whereis yum
重装python2.7和yum
查看linux系统版本:cat /etc/redhat-release
(以centos 7.5.1804举例 ) 软件下载地址:
http://vault.centos.org/7.5.1804/os/x86_64/Packages/
所需文件如下:(下载自己系统对应版本的就好 当然 版本差异不大的话是可以兼容的)
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/lvm2-python-libs-2.02.177-4.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-libs-2.7.5-68.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-ipaddress-1.0.16-2.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-backports-1.0-8.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-2.7.5-68.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-iniparse-0.4-9.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-pycurl-7.19.0-19.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-urlgrabber-3.10-8.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-setuptools-0.9.8-7.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-kitchen-1.1.1-5.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/python-chardet-2.2.1-1.el7_1.noarch.rpm<br>
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/rpm-python-4.11.3-32.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-utils-1.1.31-45.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-3.4.3-158.el7.centos.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-plugin-aliases-1.1.31-45.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-plugin-protectbase-1.1.31-45.el7.noarch.rpm
wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-45.el7.noarch.rpm
上传并安装
rpm -Uvh --replacepkgs lvm2-python-libs*.rpm --nodeps --force
rpm -Uvh --replacepkgs libxml2-python*.rpm --nodeps --force
rpm -Uvh --replacepkgs python*.rpm --nodeps --force
rpm -Uvh --replacepkgs rpm-python*.rpm yum*.rpm --nodeps --force
There are no enabled repos 错误解决
此时使用yum install 出现There are no enabled repos
解决方法:
下载对应版本repo文件, 放入/etc/yum.repos.d/ 目录下,
下载地址:http://mirrors.163.com/.help/centos.html
yum clean all
yum makecache
出现上述问题 是因为我想下载一个python3环境 项目是用python3写的 ,由此可见 在没有把握的情况下 应该谨慎删除python2.7 (python2和3的语法有所不同),最佳的方案是让python2和python3共存。不慎删除python2这个当已经上过好几次了 特此写篇博客记录一下。下面介绍python3的下载安装:
安装python3
双版本共存 我们使用make二进制安装的方式:
首先我们下载tgz包
cd /usr/local
# 新建一个目录
mkdir python3
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
安装
# 指定安装目录 方便我们后期维护
./configure --prefix=/usr/local/python3
make
make altinstall
让系统默认使用Python 3
cd /usr/bin
mv python python-backup
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python
多版本共存完整步骤:
# 查看软连接
ll python3 # 在 /usr/bin 目录执行
# 如果存在软连接,则先删除
unlink python3(软连接名称)
unlink pip3
# 建立软连接
#python3 为软连接名称,可以自定义,如python38
ln -s /usr/local/python38 /usr/bin/python3
ln -s /usr/local/pip38 /usr/bin/pip3
# 测试
python3 # 软连接名称
在默认使用python3后,我们的yum不能正常使用了 因为yum是使用的python2语法编写的,如果熟悉python 或许可以直接改写相关文件的语法 ,我们因为不是那么的熟,把yum相关文件 指定回python2 是不错的选择。
yum配置文件指定python2
vim /usr/bin/yum
将第一行"#!/usr/bin/python" 改为 “#!/usr/bin/python2”
vim /usr/libexec/urlgrabber-ext-down
同样 将第一行"#!/usr/bin/python" 改为 “#!/usr/bin/python2”
防火墙相关功能修复
不出意外的话 此时防火墙功能还是异常的 No module named gi.repository
yum install python-gobject
此时的提示应该变成 ImportError: No module named firewall.client
yum install python-firewall
至此 实现python2和3 共存 ,且yum、防火墙功能正常