我已经将我的系统(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.7
yum