“ การติดตั้ง 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.

ฉันเห็นวิธีการแก้ไข "การติดตั้งหลามเสียหาย"? และฉันก็sudo ln -sf /usr/bin/python3.6 /usr/bin/python3คิดว่ามันจะเป็นปัญหาที่คล้ายกัน แต่นั่นไม่ได้ผล (ยังมีข้อความแสดงข้อผิดพลาดเดียวกัน)

ฉันมีงูหลามสองสามเวอร์ชัน:

$ 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

คำตอบ:


16

คุณต้องใช้เวอร์ชัน Python 3 ที่เป็นค่าเริ่มต้นสำหรับ 16.04 นั่นคือ3.5ไม่ใช่ 3.6 ดังนั้นเรียกใช้:

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 python3Python เวอร์ชันต่าง ๆ ไม่ใช่ทางเลือกใน Ubuntu


32

ฉันเพียงแค่วิ่งเข้าไปในปัญหานี้บนป๊อป! _OS 18.04, พยายามที่จะอัพเกรดไป 18.10 และปรากฎว่าปัญหาที่เกิดขึ้นอยู่ใน symlink สำหรับและไม่ได้สำหรับ/usr/bin/python /usr/bin/python3ฉันได้/usr/bin/python3.6กำหนดค่าเป็นทางเลือกสำหรับpython(ไม่python3) และเมื่อฉันเปลี่ยนสิ่งนี้จากนั้นฉันสามารถเรียกใช้do-release-upgradeตามที่คาดไว้

ฉันหวังว่าข้อผิดพลาดที่ชี้ไปและไม่ได้pythonpython3


ก่อนหน้านี้มีปัญหา:

$ 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นั้นเป็น overkill ที่ไม่จำเป็นอย่างแน่นอน: สิ่งที่คุณต้องทำคือใช้update-alternatives --config pythonเพื่อpythonชี้ไปที่ล่าสุดpython2.*(เช่นpython2.7) จากนั้นใช้update-alternatives --config python3เพื่อให้python3ชี้ไปที่เฉพาะ python3.6 - ซึ่งเป็น Python 3 รุ่นเริ่มต้นสำหรับ 18.04
KiriSakow

2
หากคุณจำเป็นต้องอัพเกรดหลาม 3.7 ในอูบุนตู 18.04, ไม่ทำมัน systemwide - หรือคุณผูกพันที่จะสิ้นสุดมีปัญหาเล็ก ๆ น้อย ๆ ที่น่ารังเกียจsystemwideด้วยเครื่องมือที่จำเป็นเช่นgnome-terminal, update-managerฯลฯ แทนที่จะใช้สภาพแวดล้อมเสมือน (เอกสารที่นี่และที่นี่ )
KiriSakow

@Kiri มีหลายวิธีในการติดตั้ง Python เวอร์ชั่นอื่นโดยไม่ต้องเปลี่ยนระบบ ยกตัวอย่างเช่นการใช้ deadsnakes PPA
wjandrea

5

ผมสังเกตข้อผิดพลาดนี้บนวินโดวส์ 10 1903 วิ่ง WSL Ubuntuเมื่อฉันอยากจะอัพเกรดจาก16.04 LTSไป18.04 LTS

หลังจากที่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 launchpad

ดังนั้นทางออกหนึ่งคือการลบไพ ธ อนออกจากระบบทางเลือกอย่างสมบูรณ์และเพิ่มลิงค์ด้วยตนเองตามที่อธิบายในคำตอบที่ได้รับความนิยม

หากคุณไม่ต้องการลบไพ ธ อนออกจากระบบอื่นเพียงแค่เปลี่ยนลิงค์ในช่วงเวลาระหว่างกระบวนการอัพเกรด:

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

สิ่งนี้ใช้ได้สำหรับฉัน

ในระหว่างกระบวนการอัพเกรดลิงค์จะได้รับการซ่อมแซมโดยอัตโนมัติ ดังนั้นเมื่อการอัพเกรดเสร็จสิ้นก็จะชี้ไปที่รายการไพ ธ อนในไดเรกทอรีทางเลือก:

$ 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 และ anwser ใช้กับสถานการณ์นี้เช่นกัน


1
หมายเหตุ: คำตอบนี้นำไปใช้กับการอัพเกรดจาก Ubuntu 18.04 LTS เป็น 19.04 ฉันลองด้วยตัวเองหลังจากการอัปเดตเป็น 18.04 เสร็จเรียบร้อยแล้ว
Daniel K.

3

โดยพื้นฐานแล้ววิธีแก้ปัญหานี้ประกอบด้วยการ/usr/bin/pythonชี้ไปที่เวอร์ชันที่ถูกต้องของ Python ที่ Ubuntu คาดว่าจะมีการปล่อย (เช่นใน 16.04 คือ Python2.7 และ 18.04 เป็น Python3.6)

หากคุณติดตั้ง Python หลายเวอร์ชันในระบบของคุณคุณอาจใช้update-alternativesเพื่อจัดการกับPython มันไม่สำคัญว่าทางเลือกเริ่มต้นของคุณสำหรับ Python จะเป็นรุ่นที่ถูกต้องที่ระบบของคุณคาดหวัง (3.6 ใน Ubuntu 18.04) แต่มันจะไม่ทำงาน

เหตุผลนี้จะไม่ทำงานก็คือว่าเมื่อใช้update-alternatives, /usr/bin/python3คะแนนไป/etc/alternatives/python3และมันก็ดูเหมือนว่าไม่ตรงเช่นเดียวกับการทำชี้ไปที่/usr/bin/python3/usr/bin/python3.6

นั่นเป็นสาเหตุที่วิธีแก้ปัญหานี้มักจะประกอบด้วยการหยุดการจัดการเวอร์ชัน Python3 ของคุณด้วยupdate-alternativesและ/usr/bin/python3ชี้ไปที่เวอร์ชันที่ถูกต้องของ Python3 ที่ระบบของคุณคาดหวัง


/usr/bin/pythonไม่มีอยู่ในการติดตั้งใหม่ทั้งหมดที่ 18.04 แต่ถ้าคุณทำการอัพเกรดแทนการติดตั้งใหม่ทั้งหมดหรือติดตั้งpythonแพคเกจซึ่งในกรณีนี้มันควรจะเป็น Python 2.7 ไม่ใช่ 3.6 ดูPEP 394
wjandrea

ต้องมีความชัดเจนรุ่นที่แตกต่างของงูใหญ่ไม่ได้เป็นทางเลือกบน Ubuntu update-alternativesและไม่ควรจะมีการจัดการกับ นี่เป็นเพราะระบบปฏิบัติการอาศัยรุ่นที่กำลังติดตั้งอยู่
wjandrea
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.