Cài đặt python3 của bạn bị hỏng


13

Tôi muốn nâng cấp từ Ubuntu 16.04.5 LTS lên 18.04, vì vậy đã chạy sudo do-release-upgrade. Sau khi tải xuống và giải nén bionic.tar.gztôi nhận được:

Can not upgrade 

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

Tôi thấy Làm thế nào để sửa "cài đặt python bị hỏng"? và vì vậy tôi đã sudo ln -sf /usr/bin/python3.6 /usr/bin/python3nghĩ rằng nó sẽ là một vấn đề tương tự. Nhưng điều đó đã không làm việc (vẫn thông báo lỗi tương tự).

Tôi có một vài phiên bản 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

Làm thế nào để tôi sửa chữa python3?


1
Và những gì về cài đặt lại (như được đề cập trong câu trả lời được chấp nhận)?
Kulfy

Câu trả lời:


14

Bạn cần sử dụng phiên bản Python 3 mặc định cho 16.04. Đó là 3,5 , không phải 3,6. Vì vậy, chạy:

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

Nếu điều đó không làm việc, hãy thử cài đặt lại python3gói.

sudo apt-get install --reinstall python3

Nhân tiện, update-alternatives --display python3nên cho bạn update-alternatives: error: no alternatives for python3. Các phiên bản khác nhau của Python không phải là lựa chọn thay thế trong Ubuntu.


32

Tôi vừa gặp vấn đề này trên Pop! _OS 18.04, cố gắng nâng cấp lên 18.10, và hóa ra vấn đề nằm ở liên kết tượng trưng cho /usr/bin/pythonchứ không phải cho /usr/bin/python3. Tôi đã /usr/bin/python3.6định cấu hình thay thế cho python(không python3) và khi tôi thay đổi điều này, thì tôi có thể chạy do-release-upgradenhư mong đợi.

Tôi muốn thông báo lỗi chỉ pythonvà không python3.


Trước đây, với vấn đề:

$ 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 

Tôi đã sửa nó theo cách này:

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

Cũng xem bình luận này dưới đây mô tả một giải pháp chính xác hơn cũng giải thích rõ hơn những gì đang xảy ra và cách khắc phục nó.


1
Có, tôi có thể xác nhận rằng giải pháp hoạt động, điều này nên được chấp nhận câu trả lời.
Sumit Jain

Điều này cũng có hiệu quả với tôi
Efi Kaltirimidou

3
Chọn tham gia update-alternatives --remove-all pythonchắc chắn là một sự quá mức không cần thiết: Tất cả những gì bạn cần làm là sử dụng update-alternatives --config pythonđể có pythonđiểm mới nhất python2.*(ví dụ python2.7), sau đó sử dụng update-alternatives --config python3để có python3điểm cụ thể python3.6 - đó là phiên bản Python 3 mặc định cho 18.04.
KiriSakow

2
Nếu bạn cần phải nâng cấp lên python 3.7 trong Ubuntu 18,04, đừng làm điều đó toàn hệ thống - hoặc bạn buộc phải kết thúc gặp vấn đề chút khó chịu toàn hệ thống với các công cụ thiết yếu thích gnome-terminal, update-managervv Thay vì sử dụng các môi trường ảo (tài liệu ở đâyở đây )
KiriSakow

@Kiri Có nhiều cách để cài đặt các phiên bản Python khác mà không cần thay thế (các) hệ thống. Ví dụ: sử dụng PPA giả .
wjandrea

5

Tôi đã quan sát thông báo lỗi này trên Windows 10 1903 chạy WSL Ubuntu khi tôi muốn nâng cấp từ 16.04 LTS lên 18.04 LTS .

Sau khi do-release-upgradethất bại, tôi chuyển pythoncác lựa chọn thay thế cho mọi lựa chọn được cung cấp bởi update-alternatives --config pythonvà chạy lại lệnh nâng cấp. Điều đó không giúp được gì.

Sau đó, tôi đã kiểm tra tệp nhật ký /var/log/dist-upgrade/main.logcó chứa các dòng

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

Vì vậy, mặc dù thông báo lỗi đề cập đến python3 , vấn đề là về python2 .

Tập lệnh nâng cấp kiểm tra /usr/bin/pythonliên kết đến /usr/bin/python2, xem mã nguồn DistUpgrade/DistUpgradeController.pyở đây: launchpad ubfox

Vì vậy, một giải pháp là loại bỏ hoàn toàn python khỏi hệ thống thay thế và thêm liên kết bằng tay, như được mô tả trong câu trả lời phổ biến nhất.

Nếu bạn không muốn xóa python khỏi hệ thống thay thế, chỉ cần thay đổi liên kết trong thời gian trong quá trình nâng cấp:

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

Điều này làm việc cho tôi.

Trong quá trình nâng cấp, liên kết sẽ tự động được sửa chữa. Vì vậy, khi quá trình nâng cấp kết thúc, nó trỏ đến mục python trong thư mục thay thế:

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

Chỉnh sửa: để biết thông tin kỹ lưỡng, vấn đề cũng có thể xuất hiện nếu bạn nâng cấp từ 18.04 LTS lên 19.04 và anwser cũng áp dụng cho tình huống này.


1
Lưu ý: Câu trả lời này cũng áp dụng cho bản nâng cấp từ Ubuntu 18.04 LTS lên 19.04. Tôi đã thử nó sau khi bản cập nhật đến 18.04 đã hoàn thành thành công.
Daniel K.

3

Về cơ bản giải pháp cho vấn đề này bao gồm thực hiện /usr/bin/python phiên bản Python phù hợp mà phiên bản Ubuntu của bạn mong đợi (ví dụ: trong 16.04 là Python2.7 và trong 18.04 là Python3.6).

Nếu bạn có một số phiên bản Python được cài đặt trong hệ thống của mình, bạn có thể đang sử dụng update-alternativesđể quản lý chúng. Không có vấn đề gì thay thế mặc định của bạn cho Python là phiên bản phù hợp mà hệ thống của bạn mong đợi (3.6 trong Ubuntu 18.04), nó sẽ không hoạt động.

Lý do tại sao điều này không hoạt động là vì, khi sử dụng update-alternatives, /usr/bin/python3trỏ đến /etc/alternatives/python3và dường như điều đó không hoàn toàn giống với việc tạo /usr/bin/python3điểm nhấn /usr/bin/python3.6.

Đó là lý do tại sao giải pháp cho vấn đề này thường bao gồm việc ngừng quản lý các phiên bản Python3 của bạn update-alternatives/usr/bin/python3hướng đến phiên bản Python3 phù hợp mà hệ thống của bạn mong đợi.


/usr/bin/pythonkhông tồn tại trên bản cài đặt sạch 18.04, nhưng nó không có nếu bạn thực hiện nâng cấp thay vì cài đặt sạch hoặc cài đặt pythongói, trong trường hợp đó phải là Python 2.7, không phải 3.6. Xem PEP 394 .
wjandrea

Để rõ ràng, các phiên bản khác nhau của Python không phải là lựa chọn thay thế trên Ubuntu và không nên được quản lý update-alternatives. Điều này là do HĐH dựa trên một phiên bản nhất định đang được cài đặt.
wjandrea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.