나는 모든 사람들이 이상한 복사 등으로 그것을 고치는 방법을 말하는 것을 보았지만 아무도 문제가 발생하는 이유를 정말로 말하지 않았습니다 .
그래서 누군가가 그렇게 말했기 때문에 시스템 파일을 엉망으로 만들고 싶지 않은 사람들을 위해 설명하겠습니다.
문제는 다음과 같습니다.
- 많은 시스템 스크립트에는 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 패키지
python-apt
/ python3-apt
는 시스템 패키지이므로 기본 시스템 python 용입니다.
따라서 스크립트는 항상 현재에 연결된 버전을 가져 python3
오지만 apt 패키지가 없기 때문에 실패합니다.
일반적인 해결책 : 기본 python3
링크를 변경하지 마십시오 . 이제까지. 이는 python
링크 에도 적용됩니다 . 앱이 Python3에서 작동하지 않는 일부 오래된 구문 요소를 사용하여 Python2로 작성된 경우 앱이 작동하지 않습니다.
[Python3과 호환되지 않는 Python2.7로 작성된 터미네이터를 사용하기 때문에 터미널이 고장났습니다.]
여기에 제시된 솔루션은 적절한 패키지 파일 복사 / 링크 또는 python3
링크 변경을 제안 합니다.
두 가지를 모두 분석해 보겠습니다.
- apt 패키지 복사 / 연결
Python3.4 주변에서는 모든 Python 스크립트가 최신 버전에서도 작동하므로 이것은 문제 가되지 않습니다 .
지금까지. 그러나 시스템을 충분히 오래 유지하면 미래에 중단 될 수 있습니다.
python3
다시 링크 변경
"절대 링크를 변경하지 않음"으로 돌아갈 수 있기 때문에 이것은 훌륭한 솔루션입니다.
"하지만 그냥 타이핑하는 게 python
좋아요!" - 나도 좋아해! 이것이 제가 처음에이 문제를 해결 한 방법입니다!
일반적으로 시스템 링크를 수동으로 변경하는 것을 피해야합니다. update-alternatives
대신 다른 버전을 링크하는 데 사용 하십시오 . 이는 버전이 많은 모든 앱에 적용됩니다. 이것은 여전히 시스템 스크립트를 깨뜨릴 것입니다 (링크를 변경하기 때문입니다). 그러나 링크와 목적지를 올바른 순서로 놓았는지 또는 오타를 만들 었는지 걱정하지 않고 쉽게 앞뒤로 전환 할 수 있습니다.
링크 또는 별칭에 python
/ 이외의 다른 이름을 사용하는 것이 좋습니다 python3
.
또는 시스템 링크를 변경하지 않고 자신의 python
/ python3
링크를 PATH에 추가하십시오 (가상 환경과 마찬가지로).