升级了Python,现在我无法运行“yum update”

升级了Python,现在我无法运行“yum update”

我已经将我的系统(CentOS 7)升级到Python 3.7,似乎已经破坏了很多东西。特别是,我无法执行 yum 升级...

[myuser@server ~]$ sudo yum upgrade
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.us-midwest-1.nexcess.net
 * epel: mirror.layeronline.com
 * extras: mirror.us-midwest-1.nexcess.net
 * updates: mirror.us-midwest-1.nexcess.net
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax


Exiting on user cancel

有什么办法可以治愈我这里的疼痛吗?

答案1

笔记:万一有人还需要它。

不是我的链接在最后

如果这是您看到的yum install <package-name>

(base) [root@localhost rstudio]# yum install shiny-server-1.5.9.923-x86_64.rpm 
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax

原因分析 由于yum默认支持python2,所以升级到python3时,会报错。如果可以通过构建python2进入python2

(base) [root@localhost rstudio]# python2
Python 2.7.5 (default, Jul 13 2018, 13:06:57) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

然后就可以将yum代码python修改为python来实现。

让我们解决它......

vi /usr/bin/yum

将第一行的#!/usr/bin/python 更改为#!/usr/bin/python2。

#!/usr/bin/python2
import sys
try:
    import yum
except ImportError:
    print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

问题解决了!!

后记

发现yum无论安装什么软件,都是报错,类型如下:

base) [root@localhost ~]# yum install yum-fastestmirror
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirror.jdcloud.com
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax

解决方案

1, enter the edit urlgrabber-ext-down
2, change python to python2
#vi /usr/libexec/urlgrabber-ext-down

#!/usr/bin/python >--Replace with -->#!/usr/bin/python2

PS 几乎复制到这个词,来自解决方案

答案2

要解决此问题,您应该重新安装 CentOS 7 附带的 Python 2.7。

(请参阅下文了解为什么应该重新安装,以及如何在 CentOS 等发行版中管理较新版本的软件。)

从 RPM 重新安装旧版 Python

由于yum不起作用,您必须手动完成大部分操作,方法是下载软件包并rpm直接使用重新安装它们。

例如,您可以在此处找到 Python 2.7 RPM(适用于 x86_64 上的 CentOS 7):

http://mirror.centos.org/centos/7/os/x86_64/Packages/python-2.7.5-76.el7.x86_64.rpm

您可以使用wget或来获取它curl

然后,将目录更改为您下载软件包的目录,并使用以下命令安装它:

$ sudo rpm -Fvh --oldpackage python-*.rpm

( “刷新”rpm -F命令-F将更新已安装的软件包。使用该命令--oldpackage将允许您重新安装相同版本,甚至安装旧版本,这是可能的,因为您可能已经获得比版本更新的软件包更新你下载了。)

这可能不是您需要的唯一包,我建议您查看以 开头的所有包python-*,因为许多子包(python-libs这是一个明显的情况,但可能还有其他情况)也可能已被覆盖。您可以从以下位置下载它们同一地点(警告:此处列出的目录很长,可能需要一段时间才能获取整个列表。)

您可能需要其他选项,例如--force--nodeps,但想法是您设法从 CetnOS 重新安装软件包并将 Python 软件包覆盖回 2.7(即使是稍旧的版本,并非所有更新)。

要列出所有匹配的包python-*,您可以使用:

$ rpm -qa 'python-*'

您还可以验证特定包中的文件是否已被覆盖:

$ rpm -V python-libs

这将列出包中至少已修改一个属性的文件。列出的属性5是文件的 MD5 校验和,这意味着该文件的内容已被更改。

一旦恢复了足够的软件包,请尝试yum再次运行,最终可能会再次升级软件包。

如果我不关心Python 2.7,为什么要重新安装它呢?

CentOS 及其上游 RHEL(Red Hat Enterprise Linux)等操作系统以稳定性和可靠性为目标而构建。当然,这意味着有时软件包版本会比较旧,但这意味着所有内容都经过测试,可以协同工作。

正如您所见,Python 是 CentOS/RHEL 的核心,许多其他软件包都依赖于它。好吧,即使是包管理软件也是如此。因此,正如您所见,覆盖 Python 版本肯定会破坏操作系统。

如果您想要一个附带最新 Python 的发行版,那么 CentOS/RHEL 并不是您想要的。尝试 Fedora(最接近 CentOS/RHEL,但每 6 个月发布一次)、Arch Linux(滚动版本)或其他经常发布版本(通常每 6 个月发布一次)或滚动发布发行版(始终滚动更新的软件包)之一.)

如何在 CentOS 7 上获取 Python 3.7?

但是,如果您确实想要/需要 CentOS(并且有很多充分的理由)并且您想要 Python 3.7(或任何其他软件的更新版本),请考虑以不干扰的方式安装它操作系统发布的版本,保持该版本不变。

以Python 3.7为例,将其安装在/usr/local,/opt/python-3.7或类似目录下。将您的用户设置$PATH为在系统版本之前选择该版本的 Python。确保您不调整/usr/bin/python符号链接,而是使用python3较新版本的符号链接。

同样的建议也适用于您想要与 CentOS 或类似 Linux 发行版中的系统部署版本并行安装的大多数其他软件。

答案3

升级 python 后,我编辑了 /bin/yum 和 /usr/libexec/urlgrabber-ext-down 并将 /usr/bin/python 更改为 /usr/bin/python2.7 并且 yum 完美运行。当然,Python 的未来升级可能会打破这个,所以记录下你所做的事情。

答案4

最干净的解决方案可能是 A. Rick 的alternatives东西,但最快的解决方案是暂时用指向或 的符号链接替换/usr/bin/python符号链接(指向/usr/bin/python3或 到/usr/bin/python3.6或 so;请记住它)。之后,运行所有命令,然后切换回之前的命令。如果这是在运行各种进程和用户的服务器上,最好首先切换到管理模式。/usr/bin/python2/usr/bin/python2.7yum

相关内容