"Your python3 install is corrupted"
I just ran into this problem on Pop!_OS 18.04, trying to upgrade to 18.10, and it turns out that the problem lay in the symlink for /usr/bin/python
and not for /usr/bin/python3
. I had had /usr/bin/python3.6
configured as an alternative for python
(not python3
), and when I changed this, then I could run do-release-upgrade
as expected.
I wish the error message pointed to python
and not python3
.
Before, with the problem:
$ 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
I fixed it this way:
$ sudo update-alternatives --remove-all python
$ sudo ln -sf /usr/bin/python2.7 /usr/bin/python
Also see this comment below which describes a more precise solution that also better explains what is going on and how to fix it.
You need to use the default Python 3 version for 16.04. That's 3.5, not 3.6. So run:
sudo ln -sf /usr/bin/python3.5 /usr/bin/python3
If that doesn't work, try reinstalling the python3
package.
sudo apt-get install --reinstall python3
By the way, update-alternatives --display python3
should give you update-alternatives: error: no alternatives for python3
. Different versions of Python are not alternatives in Ubuntu.
I observed this error message on Windows 10 1903 running WSL Ubuntu when I wanted to upgrade from 16.04 LTS to 18.04 LTS.
After do-release-upgrade
had failed, I switched python
alternatives to every choice offered by update-alternatives --config python
and ran the upgrade command again. That did not help.
Then I checked the log file /var/log/dist-upgrade/main.log
which contained the lines
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
So although the error message mentions python3, the issue is about python2.
The upgrade script checks for /usr/bin/python
linking to /usr/bin/python2
, see the source code of DistUpgrade/DistUpgradeController.py
here: ubuntu launchpad
So one solution is to completely remove python from the alternative system and add the link manually, as described in the most popular answer.
If you don't want to remove python from the alternative system, just change the link only for the time during the upgrade process:
# rm /usr/bin/python
# ln -sf /usr/bin/python2.7 /usr/bin/python
# do-release-upgrade
This worked for me.
During the upgrade process, the link is automatically repaired. So when the upgrade is finished, it points to the python entry in the alternatives directory:
$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Sep 2 22:01 /usr/bin/python -> /etc/alternatives/python
Edit: for thorough information, the issue might also appear if you upgrade from 18.04 LTS to 19.04 and the anwser applies to this situation, too.