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)
有什么办法可以治愈这里的痛苦吗?
要解决此问题,您应该重新安装 CentOS 7 附带的 Python 2.7。
(有关为什么要重新安装,以及如何在 CentOS 等发行版中管理较新版本的软件,请参见下文。)
由于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
再次运行,它可能最终会再次升级软件包。
CentOS 及其上游 RHEL(Red Hat Enterprise Linux)等操作系统是为稳定性和可靠性而构建的。当然,这意味着有时包版本会很旧,但这意味着所有东西都经过测试可以协同工作。
如您所见,Python 是 CentOS/RHEL 的核心,许多其他软件包都依赖于它。好吧,即使是包管理软件也是如此。因此,如您所见,覆盖 Python 版本肯定会破坏操作系统。
如果你想要一个带有最新 Python 的发行版,那么 CentOS/RHEL 不是你想要的。尝试 Fedora(最接近 CentOS/RHEL,但每 6 个月发布一次)、Arch Linux(滚动发布)或其他经常发布(通常每 6 个月发布一次)或滚动发布发行版(更新的软件包一直滚动发布)之一.)
但是如果你真的想要/需要 CentOS(并且有很多很好的理由)并且你想要 Python 3.7(或任何其他软件的更新版本),请考虑以不干扰的方式安装它操作系统提供的版本,保持该版本不变。
在Python 3.7的具体例子中,安装下/usr/local
,/opt/python-3.7
或类似的目录。将您的用户设置$PATH
为在系统之前选择该版本的 Python。确保您不调整/usr/bin/python
符号链接,而是使用python3
较新版本的符号链接。
相同的建议可用于您希望与 CentOS 或类似 Linux 发行版中的系统部署版本并行安装的大多数其他软件。
小智 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从解决方案复制,几乎是这个词
归档时间: |
|
查看次数: |
8711 次 |
最近记录: |