“您的python3安装已损坏”


13

我想从Ubuntu 16.04.5 LTS升级到18.04,所以跑了sudo do-release-upgrade。下载并解压缩后,bionic.tar.gz我得到:

Can not upgrade 

Your python3 install is corrupted. Please fix the '/usr/bin/python3'
symlink.

我看到了如何解决“ python安装损坏”的问题?所以我确实sudo ln -sf /usr/bin/python3.6 /usr/bin/python3认为这将是一个类似的问题。但这不起作用(仍然是相同的错误消息)。

我有一些python版本:

$ ls /usr/lib | grep python
python2.7
python3
python3.5
python3.6

$ update-alternatives --display python3
python3 - auto mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python3.6
  link python3 is /usr/bin/python3
/usr/bin/python3.5 - priority 1
/usr/bin/python3.6 - priority 2

我该如何解决python3


1
而重新安装(如已接受的答案中所述)又如何呢?
Kulfy

Answers:


16

您需要为16.04使用默认的Python 3版本。那是3.5,而不是3.6。因此运行:

sudo ln -sf /usr/bin/python3.5 /usr/bin/python3

如果这样不起作用,请尝试重新安装该python3软件包。

sudo apt-get install --reinstall python3

顺便说一句,update-alternatives --display python3应该给你update-alternatives: error: no alternatives for python3。在Ubuntu中,不同版本的Python并非替代品。


32

我只是在Pop!_OS 18.04上遇到了这个问题,试图升级到18.10,结果发现问题出在符号链接上/usr/bin/python,而for却不是/usr/bin/python3。我已经/usr/bin/python3.6配置为python(not python3)的替代品,当我更改它时,我可以do-release-upgrade按预期运行。

我希望错误消息指向python而不是python3


以前,有问题:

$ update-alternatives --display python
python - manual mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python2.7
  link python is /usr/bin/python
/usr/bin/python2.7 - priority 1
/usr/bin/python3.6 - priority 2 

我以这种方式修复了它:

$ sudo update-alternatives --remove-all python
$ sudo ln -sf /usr/bin/python2.7 /usr/bin/python

另请参阅下面的注释该注释描述了更精确的解决方案,还可以更好地说明正在发生的事情以及如何解决它。


1
是的,我可以确认该解决方案有效,应该接受此答案。
Sumit Jain

这对我也很有效
Efi Kaltirimidou,

3
选择了update-alternatives --remove-all python绝对不必要的矫枉过正:你需要做的全部是使用update-alternatives --config pythonpython指向最新的python2.*(例如python2.7),然后使用update-alternatives --config python3具有python3指向明确 python3.6 -这是默认的Python 3版本18.04。
KiriSakow

2
如果您需要升级到3.7蟒在Ubuntu 18.04,不这样做,系统范围-或你一定会最终有讨厌的小问题,系统范围与基本工具一样gnome-terminalupdate-manager等而使用的虚拟环境(文档,这里这里
KiriSakow19年

@Kiri有一些方法可以安装其他版本的Python,而无需替换系统。例如,使用Deadsnakes PPA
wjandrea

5

当我想从16.04 LTS升级到18.04 LTS时,在运行WSL Ubuntu的Windows 10 1903上观察到此错误消息。

之后do-release-upgrade失败了,我改用python替代品所提供的每一个选择update-alternatives --config python,并再次运行升级命令。那没有帮助。

然后我检查了/var/log/dist-upgrade/main.log包含以下行的日志文件

2019-09-02 20:58:08,686 DEBUG _pythonSymlinkCheck run
2019-09-02 20:58:08,687 DEBUG python symlink points to: '/etc/alternatives/python', but expected is 'python2.7' or
'/usr/bin/python2.7'
2019-09-02 20:58:08,688 ERROR pythonSymlinkCheck() failed, aborting

因此,尽管错误消息提到了python3,但问题出在python2上

升级脚本检查是否/usr/bin/python链接到/usr/bin/python2,请参见DistUpgrade/DistUpgradeController.py此处的源代码:ubuntu launchpad

因此,一种解决方案是从替代系统中完全删除python,然后手动添加链接,如最受欢迎的答案所述。

如果您不想从备用系统中删除python,只需在升级过程中更改链接即可:

# rm /usr/bin/python 
# ln -sf /usr/bin/python2.7 /usr/bin/python
# do-release-upgrade

这对我有用。

在升级过程中,链接将自动修复。因此,升级完成后,它指向Alternatives目录中的python条目:

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Sep  2 22:01 /usr/bin/python -> /etc/alternatives/python

编辑:要获得详尽的信息,如果您从18.04 LTS升级到19.04,并且anwser也适用于这种情况,也可能会出现此问题。


1
注意:此答案也适用于从Ubuntu 18.04 LTS升级到19.04的情况。在成功完成对18.04的更新之后,我自己尝试了一下。
丹尼尔·K

3

基本上,解决该问题的方法包括/usr/bin/python指向Ubuntu版本期望的正确版本的Python(例如,在16.04中为Python2.7,在18.04中为Python3.6)。

如果您的系统中安装了多个版本的Python,则可能正在使用update-alternatives它们进行管理。没关系,默认的Python替代版本是系统期望的正确版本(在Ubuntu 18.04中为3.6),它将无法正常工作。

之所以不起作用,是因为在使用时update-alternatives,它/usr/bin/python3指向/etc/alternatives/python3,似乎与/usr/bin/python3指向并不完全相同/usr/bin/python3.6

这就是为什么解决此问题的方法通常包括停止使用来管理您的Python3版本,update-alternatives/usr/bin/python3指出系统期望的正确版本的Python3。


/usr/bin/python在全新安装18.04上不存在,但如果您执行升级而不是全新安装或安装python软件包,则确实存在,在这种情况下,它应该是Python 2.7,而不是3.6。参见PEP 394
wjandrea

需要明确的是,不同版本的Python并不是Ubuntu上的替代版本,不应使用进行管理update-alternatives。这是因为操作系统依赖于所安装的特定版本。
wjandrea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.