如何修复“Python安装损坏”问题?

我正在从13.10升级到14.04(现在是开发版,几小时后将变为稳定版),使用do-release-upgrade遇到了以下问题:
Can not upgrade 

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

我在折腾了一会儿之后解决了这个问题,所以我想在这里分享我的解决方案。希望能对某人有所帮助。
5个回答

我的问题最终是由于一个被修改的/usr/bin/python符号链接引起的,正如错误信息中建议的那样。我正在使用update-alternatives来管理/usr/bin/python,所以它指向了/etc/alternatives/python。结果发现,do-release-upgrade对这个符号链接非常严格,仅仅选择python2.7并不足够,所以我最终被迫将其恢复到原始状态:
sudo ln -sf /usr/bin/python2.7 /usr/bin/python

这解决了问题。
如果这对你不起作用,那么我猜你的Python安装可能真的损坏了。我建议
sudo apt-get install --reinstall python

@BenjaminKohl 很高兴能帮到你 :) - 4ae1e1
/etc/alternatives/python 软链接到 /usr/bin/python2.7 了吗?还有其他的东西优先级更高吗? - heemayl
很抱歉,你可能搞错了……/usr/bin/python2.7 是实际的二进制文件,它不应该是符号链接,符号链接应该是 /etc/alternatives/python。你介意再检查一下吗? - heemayl
@heemayl 抱歉,我误读了你的评论并且在我的部分出现了拼写错误。/usr/bin/python 是一个指向 /etc/alternatives/python 的符号链接(当然 /usr/bin/python2.7 才是二进制文件,但这不是问题所在)。 - 4ae1e1
是的,/etc/alternatives/python 然后会被建立符号链接到你选择的任何位置(不一定是 /usr/bin/python2.7 — 在这种情况下你为什么需要 update-alternatives 呢?),但是重点是在执行 do-release-upgrade 时不允许对 /usr/bin/python 进行符号链接。 - 4ae1e1
在我的情况下,这还不够:我还必须调整 /usr/share/python/debian_defaults,使其与 /usr/bin/python 指向的版本相匹配。 - Pietro Braione
在我的情况下,我没有使用任何替代方案("update-alternatives --get-selections" 没有显示 python)。Python 也可以正常运行,对于 /usr/bin/python 和 python2,链接似乎都很好。只需重新制作 /usr/bin/python 的链接就足以使更新正常工作。至于参考,我的 Ubuntu 安装在 VMware 虚拟机上。 - John Jefferies

这个是正确的。
sudo update-alternatives --remove-all python
sudo ln -sf /usr/bin/python2.7 /usr/bin/python

2这是绝对正确的。在我使用update-alternatives --remove-all python之前,它对我来说是行不通的。 - TryTryAgain

在Ubuntu 18.10中仍然存在相同的问题。
/usr/bin/python链接到一个较旧的版本。即使有更高版本可用,但这个超级智能的进程(在18.10中!)要求P 2.7。所以我给了它,并且被接受了。
这对我解决了问题:
1)删除/usr/bin/python,执行sudo rm /usr/bin/python 2)创建一个新的链接sudo ln -sf /usr/bin/python2.7 /usr/bin/python 在18.10中,我无法使用sudo update-alternatives --remove-all pythonsudo apt-get install --reinstall python
对我有效。希望对你也有帮助。

1ls -sf 覆盖了目标,所以 1) 是无意义的,而且 2) 正是我回答告诉你要做的。真是浪费时间... - 4ae1e1
不要发牢骚:你的引用是错误的,而且我说的正好与你关于“... --reinstall python”的说法相反。是的,我对18.10的经验与你不同,并且我会解释这一点。完全没有必要发出厚颜无耻的评论。 - opinion_no9
看到了"If this doesn't work for you, then I guess you have a genuinely corrupted python install."? - 4ae1e1
基本上,这个教训是:你要阅读周围环境并了解原因,而不仅仅是随意挑选代码块,将它们粘贴到终端中(这样做很危险),然后看看会发生什么。顺便说一句,你的sudo rm仍然毫无意义。 - 4ae1e1
欢迎您提出评论。 - opinion_no9
1没错,它在18.10版本上可以正常运行。谢谢。 - Wings
第2步修复了问题。这真是非常奇怪,考虑到默认现在是Python3! - DaveStephens

如果你遇到了关于 /usr/bin/python3 的问题,那么:
sudo update-alternatives --remove-all python3
sudo ln -sf /usr/bin/python3.6 /usr/bin/python3

确保创建符号链接 python3.6 而不是 3.7。至少在将 Ubuntu 18.10 升级到 19.04 时是这样要求的。

这对我来说是个解决方案,因为我手动强制安装了带有外部PPA的python3。 - Luciano Fantuzzi

对于Ubuntu 19.04,默认的Python版本是3.7。当我升级到Ubuntu 19.10时,遇到了相同的错误,下面的方法可以帮助解决:
sudo apt-get install --reinstall python3
sudo ln -sf /usr/bin/python3.7 /usr/bin/python3

如果您的Python包出现严重问题,唯一剩下的方法是强制删除它,然后重新安装:

sudo dpkg --remove --force-remove-reinstreq --force-depends python3
sudo apt-get -f install