ฉันเห็นทุกคนบอกวิธีแก้ไขด้วยการคัดลอกแปลก ๆ ฯลฯ แต่ไม่มีใครบอกว่าทำไมปัญหาถึงเกิดขึ้น
ให้ฉันอธิบายสำหรับพวกคุณที่ชอบฉันไม่ต้องการยุ่งกับไฟล์ระบบเพียงเพราะมีคนใน SO บอกพวกเขาอย่างนั้น
ปัญหาคือ:
- สคริปต์ระบบจำนวนมากมีการเข้ารหัส python3 shebang ไว้ในฮาร์ดโค้ด คุณสามารถตรวจสอบได้ด้วยตัวเอง:
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/*
/usr/lib/cnf-update-db:
/usr/lib/command-not-found:
/usr/lib/cups/filter/pstotiff:
/usr/lib/cups/filter/rastertosag-gdi:
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:
/usr/lib/language-selector/ls-dbus-backend:
/usr/lib/python3/dist-packages/language_support_pkgs.py:
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:
/usr/lib/python3/dist-packages/cupshelpers/debug.py:
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:
/usr/lib/ubuntu-release-upgrader/check-new-release:
/usr/lib/update-notifier/package-data-downloader:
/usr/lib/update-notifier/backend_helper.py:
/usr/lib/update-notifier/apt_check.py:
/usr/lib/update-notifier/apt-check:
- python apt package
python-apt
/ python3-apt
เป็นแพ็คเกจระบบดังนั้นจึงเป็น python ของระบบเริ่มต้น
ดังนั้นสคริปต์จะได้รับเวอร์ชันที่เชื่อมโยงอยู่ในปัจจุบันเสมอpython3
แต่ล้มเหลวเนื่องจากไม่มีแพ็กเกจ apt
วิธีแก้ปัญหาทั่วไป: python3
อย่าเปลี่ยนลิงค์เริ่มต้น เคย. นอกจากนี้ยังใช้กับpython
ลิงก์ - หากแอปเขียนด้วย Python2 โดยมีองค์ประกอบไวยากรณ์เก่าบางอย่างที่ใช้ไม่ได้ใน Python3 แอปจะไม่ทำงาน
[เทอร์มินัลของฉันพังแบบนั้นเพราะฉันใช้ Terminator ซึ่งเห็นได้ชัดว่าเขียนด้วย Python2.7 ไม่เข้ากันกับ Python3]
โซลูชันที่นำเสนอที่นี่อาจแนะนำให้คัดลอก / เชื่อมโยงไฟล์แพ็กเกจ apt หรือเปลี่ยนpython3
ลิงค์
ลองวิเคราะห์ทั้งสองอย่าง:
- คัดลอก / เชื่อมโยงแพ็คเกจ apt
สิ่งนี้ไม่น่าจะเป็นปัญหาเพราะสคริปต์ Python จาก Python3.4 ทั้งหมดทำงานในเวอร์ชันที่ใหม่กว่าเช่นกัน
จนถึงตอนนี้ แต่อาจพังได้ในอนาคต - หากคุณรักษาระบบไว้นานพอ
- กำลังเปลี่ยน
python3
ลิงค์กลับ
นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมเพราะเราสามารถกลับไปที่ "ไม่เคยเปลี่ยนลิงก์"
"แต่ฉันชอบที่ต้องพิมพ์เฉยๆpython
!" - ฉันชอบมันเหมือนกัน! นั่นเป็นวิธีที่ฉันประสบปัญหานี้ตั้งแต่แรก!
โดยทั่วไปคุณควรหลีกเลี่ยงการเปลี่ยนลิงก์ระบบด้วยตนเอง - ใช้update-alternatives
ลิงก์เวอร์ชันต่างๆแทน สิ่งนี้ใช้ได้กับแอปที่มีหลายเวอร์ชัน สิ่งนี้จะยังทำลายสคริปต์ระบบเหล่านั้น (เพราะมันเปลี่ยนลิงค์) แต่คุณสามารถสลับไปมาได้อย่างง่ายดายโดยไม่ต้องกังวลว่าคุณจะใส่ลิงค์และปลายทางในลำดับที่ถูกต้องหรือพิมพ์ผิด
ลองใช้ชื่ออื่นที่ไม่ใช่python
/ python3
สำหรับลิงค์หรือนามแฝงของคุณ
หรือเพิ่มpython
/ python3
ลิงก์ของคุณเองไปยัง PATH (เช่นเดียวกับสภาพแวดล้อมเสมือนจริง) โดยไม่ต้องเปลี่ยนลิงก์ระบบ