"Instalasi python3 Anda rusak"

13

Saya ingin memutakhirkan dari Ubuntu 16.04.5 LTS ke 18.04, jadi jalankan sudo do-release-upgrade. Setelah mengunduh dan mengekstrak, bionic.tar.gzsaya mendapatkan:

Can not upgrade 

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

Saya melihat Bagaimana cara memperbaiki "instalasi python rusak"? jadi saya memang sudo ln -sf /usr/bin/python3.6 /usr/bin/python3berpikir bahwa itu akan menjadi masalah yang serupa. Tapi itu tidak berhasil (pesan kesalahan masih sama).

Saya punya beberapa versi 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

Bagaimana cara saya memperbaikinya python3?

mRcSchwering
sumber
1
Dan bagaimana dengan instalasi ulang (sebagaimana disebutkan dalam jawaban yang diterima)?
Kulfy

Jawaban:

14

Anda perlu menggunakan versi Python 3 default untuk 16.04. Itu 3,5 , bukan 3,6. Jadi jalankan:

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

Jika itu tidak berhasil, coba instal ulang python3paket.

sudo apt-get install --reinstall python3

By the way, update-alternatives --display python3harus memberi Anda update-alternatives: error: no alternatives for python3. Versi berbeda dari Python bukanlah alternatif di Ubuntu.

wjandrea
sumber
32

Saya baru saja mengalami masalah ini di Pop! _OS 18.04, mencoba memutakhirkan ke 18.10, dan ternyata masalahnya terletak pada symlink untuk /usr/bin/pythondan bukan untuk /usr/bin/python3. Saya telah /usr/bin/python3.6mengkonfigurasi sebagai alternatif untuk python(tidak python3), dan ketika saya mengubah ini, maka saya bisa berjalan do-release-upgradeseperti yang diharapkan.

Saya berharap pesan kesalahan menunjuk ke pythondan tidak python3.


Sebelumnya, dengan masalah:

$ 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 

Saya memperbaikinya dengan cara ini:

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

Lihat juga komentar di bawah ini yang menjelaskan solusi yang lebih tepat yang juga menjelaskan dengan lebih baik apa yang sedang terjadi dan bagaimana cara memperbaikinya.

JB Rainsberger
sumber
1
Ya, saya dapat mengkonfirmasi bahwa solusinya berfungsi, jawaban ini harus diterima.
Sumit Jain
Ini juga bekerja untuk saya
Efi Kaltirimidou
3
Memilih update-alternatives --remove-all pythonjelas merupakan suatu keharusan yang tidak perlu: Yang perlu Anda lakukan hanyalah menggunakan update-alternatives --config pythonuntuk pythonmenunjuk ke yang terbaru python2.*(mis. python2.7), Lalu menggunakan update-alternatives --config python3untuk python3menunjuk ke spesifik python3.6 - yang merupakan versi default Python 3 untuk 18.04.
KiriSakow
2
Jika Anda perlu meng-upgrade ke python 3.7 di Ubuntu 18.04, jangan lakukan itu systemwide - atau Anda terikat berakhir mengalami masalah kecil yang jahat systemwide dengan alat-alat penting seperti gnome-terminal, update-manager, dll Sebaliknya menggunakan lingkungan virtual (dokumentasi di sini dan di sini )
KiriSakow
@ Kiriri Ada cara untuk menginstal versi Python lain tanpa mengganti sistemnya. Misalnya menggunakan PPA deadsnakes .
wjandrea
5

Saya mengamati pesan kesalahan ini pada Windows 10 1903 menjalankan WSL Ubuntu ketika saya ingin meningkatkan dari 16,04 LTS ke 18,04 LTS .

Setelah do-release-upgradegagal, saya mengganti pythonalternatif untuk setiap pilihan yang ditawarkan update-alternatives --config pythondan menjalankan perintah upgrade lagi. Itu tidak membantu.

Kemudian saya memeriksa file log /var/log/dist-upgrade/main.logyang berisi baris

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

Jadi meskipun pesan kesalahan menyebutkan python3 , masalahnya adalah tentang python2 .

Skrip pemutakhiran memeriksa adanya /usr/bin/pythontautan /usr/bin/python2, lihat kode sumber di DistUpgrade/DistUpgradeController.pysini: ubuntu launchpad

Jadi salah satu solusinya adalah menghapus python sepenuhnya dari sistem alternatif dan menambahkan tautan secara manual, seperti dijelaskan dalam jawaban paling populer.

Jika Anda tidak ingin menghapus python dari sistem alternatif, cukup ubah tautan hanya untuk saat selama proses pemutakhiran:

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

Ini berhasil untuk saya.

Selama proses peningkatan, tautan secara otomatis diperbaiki. Jadi ketika pemutakhiran selesai, itu menunjuk ke entri python di direktori alternatif:

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

Sunting: untuk informasi menyeluruh, masalah ini mungkin juga muncul jika Anda memutakhirkan dari 18,04 LTS menjadi 19,04 dan server web berlaku untuk situasi ini juga.

Daniel K.
sumber
1
Catatan: Jawaban ini juga berlaku untuk pemutakhiran dari Ubuntu 18.04 LTS ke 19.04. Saya mencobanya sendiri setelah pembaruan ke 18.04 selesai dengan sukses.
Daniel K.
3

Pada dasarnya solusi untuk masalah ini terdiri dari membuat /usr/bin/pythontitik ke versi yang tepat dari Python yang diharapkan rilis Ubuntu Anda (misalnya, dalam 16,04 adalah Python2.7 dan pada 18,04 adalah Python3.6).

Jika Anda memiliki beberapa versi Python yang terinstal di sistem Anda, Anda mungkin menggunakannya update-alternativesuntuk mengelolanya. Tidak masalah banyak alternatif default Anda untuk Python adalah versi yang tepat yang diharapkan sistem Anda (3,6 di Ubuntu 18,04), itu tidak akan berfungsi.

Alasan mengapa ini tidak berhasil adalah bahwa, ketika menggunakan update-alternatives, /usr/bin/python3menunjuk ke /etc/alternatives/python3, dan tampaknya itu tidak persis sama dengan /usr/bin/python3menunjukkan /usr/bin/python3.6.

Itulah sebabnya solusi untuk masalah ini sering kali terdiri dari berhenti mengelola versi Python3 Anda update-alternativesdan /usr/bin/python3menunjukkan versi yang tepat dari Python3 yang diharapkan oleh sistem Anda.

Diego Pino
sumber
/usr/bin/pythontidak ada pada instalasi bersih 18,04, tetapi itu terjadi jika Anda melakukan upgrade bukannya instalasi bersih atau menginstal pythonpaket, dalam hal ini harus Python 2.7, bukan 3.6. Lihat PEP 394 .
wjandrea
Agar jelas, berbagai versi Python bukanlah alternatif di Ubuntu dan tidak boleh dikelola update-alternatives. Ini karena OS mengandalkan versi tertentu yang sedang diinstal.
wjandrea