「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

回答:


14

16.04のデフォルトのPython 3バージョンを使用する必要があります。それは3.6ではなく3.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の代替ではありません。


32

私はPop!_OS 18.04でこの問題に遭遇し、18.10にアップグレードしようとしましたが、問題はのシンボリックリンクで/usr/bin/pythonはなくのシンボリックリンクにあることがわかりました/usr/bin/python3。(ではなく)の/usr/bin/python3.6代替として構成していたため、これを変更すると、期待どおりに実行できました。pythonpython3do-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 pythonする必要があるのはpython、最新のものpython2.*(たとえばpython2.7update-alternatives --config python3python3指すために使用し、次に具体的に 指すために使用することpython3.6です。これは18.04のデフォルトのPython 3バージョンです。
KiriSakow

2
あなたがUbuntuの18.04でのpython 3.7にアップグレードする必要がある場合、それはシステム全体でくださいません-あるいは、あなたは厄介な少し問題がある終わるためにバインドされているシステム全体のような必要不可欠なツールでgnome-terminalupdate-managerなどというが、仮想環境(ドキュメンテーション使い、ここここを
KiriSakow

@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ランチパッド

したがって、1つの解決策は、最も一般的な回答で説明されているように、代替システムから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にアップグレードし、アンサーがこの状況にも適用される場合にも、問題が発生する可能性があります。


1
注:この回答は、Ubuntu 18.04 LTSから19.04へのアップグレードにも適用されます。18.04へのアップデートが正常に終了した後、自分で試してみました。
Daniel 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バージョンの管理を停止して、システムが期待する適切なバージョンのPython3 update-alternatives/usr/bin/python3指すようにすることで構成されています。


/usr/bin/python18.04のクリーンインストールには存在しませんが、クリーンインストールの代わりにアップグレードを行うか、pythonパッケージをインストールすると存在します。その場合、3.6ではなくPython 2.7である必要があります。PEP 394を参照してください。
wjandrea

明確にするために、異なるバージョンのPythonはUbuntuでは代替手段ではないため、で管理しないでくださいupdate-alternatives。これは、OSがインストールされている特定のバージョンに依存しているためです。
wjandrea
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.