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
を修正するにはどうすればよいですか?
16.04では、デフォルトのPython 3バージョンを使用する必要があります。 3.6ではなく .5 です。だから実行:
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
を提供するはずです。 Pythonの異なるバージョンはUbuntuの代替ではありません。
Pop!_OS 18.04でこの問題に遭遇し、18.10にアップグレードしようとしたところ、問題は/usr/bin/python
ではなく/usr/bin/python3
のシンボリックリンクにあったことがわかりました。 python
の代替として/usr/bin/python3.6
を構成していたので(python3
ではありません)、これを変更すると、期待どおりにdo-release-upgrade
を実行できました。
エラーメッセージがpython3
ではなく、python
を指すようにします。
前に、問題で:
$ 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
以下のコメント も参照してください。これは、より正確な解決策を説明するもので、何が起こっているのか、どのように修正するのかをよりよく説明しています。
基本的にこの問題の解決策は、/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
を指すようにすることとまったく同じではないためです。
そのため、この問題の解決策は、多くの場合、update-alternatives
を使用してPython3バージョンの管理を停止し、/usr/bin/python3
がシステムが期待するPython3の正しいバージョンを指すようにします。