Tôi thấy mọi người nói làm thế nào để khắc phục nó với việc sao chép kỳ lạ, vv, nhưng không ai thực sự nói tại sao sự cố xảy ra.
Vì vậy, hãy để tôi giải thích, đối với những người trong số các bạn, những người như tôi, không muốn làm rối tung các tệp hệ thống chỉ vì ai đó trên SO đã nói với họ như vậy.
Vấn đề là ở đó:
- nhiều tập lệnh hệ thống có mã hóa cứng python3 shebang vào chúng. Bạn có thể tự mình kiểm tra:
~$ 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:
- Gói apt python
python-apt
/ python3-apt
là một gói hệ thống, vì vậy nó dành cho python hệ thống mặc định
Do đó, các tập lệnh sẽ luôn nhận được phiên bản hiện được liên kết đến python3
, nhưng không thành công vì gói apt không có mặt.
Giải pháp chung: KHÔNG BAO GIỜ thay đổi python3
liên kết mặc định . Không bao giờ. Điều này cũng áp dụng cho python
liên kết - nếu một ứng dụng được viết bằng Python2 với một số phần tử cú pháp cũ không hoạt động trong Python3, thì ứng dụng đó sẽ không hoạt động.
[Thiết bị đầu cuối của tôi bị hỏng theo cách đó vì tôi sử dụng Terminator, có vẻ như được viết bằng Python2.7 không tương thích với Python3.]
Các giải pháp được trình bày ở đây đề xuất sao chép / liên kết các tệp gói apt hoặc thay đổi python3
liên kết.
Hãy phân tích cả hai:
- Sao chép / liên kết gói apt
Điều này không phải là vấn đề vì từ khoảng Python3.4, tất cả các tập lệnh python cũng hoạt động trên các phiên bản mới hơn.
Cho đến nay. Nhưng nó có thể bị hỏng trong tương lai - nếu bạn giữ hệ thống của mình đủ lâu.
- Thay đổi
python3
liên kết trở lại
Đây là một giải pháp tuyệt vời vì chúng tôi có thể quay lại trạng thái "không bao giờ thay đổi liên kết"
"Nhưng tôi thích chỉ cần gõ python
!" - Tôi thích nó quá! Đó là cách tôi giải quyết vấn đề này ngay từ đầu!
Nói chung, bạn nên tránh thay đổi liên kết hệ thống theo cách thủ công - update-alternatives
thay vào đó hãy sử dụng để liên kết các phiên bản khác nhau . Điều này áp dụng cho bất kỳ ứng dụng nào có nhiều phiên bản. Điều này vẫn sẽ phá vỡ các tập lệnh hệ thống đó (vì nó thay đổi liên kết), nhưng bạn có thể chuyển đổi qua lại dễ dàng mà không cần lo lắng liệu bạn có đặt liên kết và đích theo đúng thứ tự hay mắc lỗi đánh máy hay không.
Cân nhắc sử dụng tên khác ngoài python
/ python3
cho liên kết hoặc bí danh của bạn.
Hoặc thêm liên kết python
/ của riêng bạn python3
vào PATH (giống như môi trường ảo) mà không cần thay đổi liên kết hệ thống.