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

Dav*_*ave 1 yum centos python upgrade

我已将我的系统 (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
Run Code Online (Sandbox Code Playgroud)

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

fil*_*den 7

要解决此问题,您应该重新安装 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
Run Code Online (Sandbox Code Playgroud)

您可以使用wget或获取它curl

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

$ sudo rpm -Fvh --oldpackage python-*.rpm
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

$ rpm -qa 'python-*'
Run Code Online (Sandbox Code Playgroud)

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

$ rpm -V python-libs
Run Code Online (Sandbox Code Playgroud)

这将列出包中至少修改了一个属性的文件。列出的属性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 发行版中的系统部署版本并行安装的大多数其他软件。

  • EPEL 有 python 的附加版本。我知道他们肯定有 3.4,也许是 3.6。不确定 3.7。 (3认同)
  • EPEL 的全部意义在于提供可以安全安装在 RHEL 和 CentOS 上的更新包,Python 3 包也不例外;它们与 Python 2 软件包一起安装而不会破坏它们。EPEL 目前提供 Python 3.6.8。 (3认同)

小智 5

注意:以防有人仍然需要它。

最后不是我的链接

如果这是你在上面看到的 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
Run Code Online (Sandbox Code Playgroud)

原因分析因为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.
Run Code Online (Sandbox Code Playgroud)

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

让我们解决它....

vi /usr/bin/yum
Run Code Online (Sandbox Code Playgroud)

将第一行的 #!/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:
Run Code Online (Sandbox Code Playgroud)

问题解决了!!

后记

发现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
Run Code Online (Sandbox Code Playgroud)

解决方案

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

Run Code Online (Sandbox Code Playgroud)

PS从解决方案复制,几乎是这个词