Я бачу, як усі говорять, як це виправити дивним копіюванням тощо, але насправді ніхто не сказав чому виникає проблема.
Тож дозвольте мені пояснити, тому що ви, хто любить мене, не хочете возитися із системними файлами лише тому, що хтось із 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 пакет
python-apt
/ python3-apt
- це системний пакет, тому він призначений для системного python за замовчуванням
Таким чином, скрипти завжди отримуватимуть версію, на яку зараз зв’язано python3
, але зазнають невдачі, оскільки пакета apt немає.
Загальне рішення: НІКОЛИ не змінюйте python3
посилання за замовчуванням . Ніколи. Це також стосуєтьсяpython
посилання - якщо програма була написана на Python2 з деякими старими елементами синтаксису, які не працюють в Python3, програма не працюватиме.
[Мій термінал зламався таким чином, оскільки я використовую Terminator, який, мабуть, написаний на Python2.7, не сумісний з Python3.]
Рішення, представлені тут, пропонують скопіювати / зв’язати файли пакета apt або змінити python3
посилання.
Давайте проаналізуємо обидва:
- Копіювання / зв'язування пакета apt
Це не повинно бути проблемою, оскільки приблизно з Python3.4 всі сценарії python працюють і на новіших версіях.
Так далеко. Але це може зламатися в майбутньому - якщо ви будете тримати систему досить довго.
- Зміна
python3
зворотного посилання
Це чудове рішення, тому що ми можемо повернутися до "ніколи не змінюючи посилання"
"Але мені подобається друкувати просто python
!" - Мені це теж подобається! Ось так я спочатку дійшов до цієї проблеми!
Загалом, слід уникати ручної зміни системних посилань - update-alternatives
замість цього використовуйте для зв’язування різних версій . Це стосується будь-якої програми з багатьма версіями. Це все одно порушить ці системні сценарії (оскільки це змінює посилання), але ви можете легко перемикатись туди-сюди, не турбуючись про те, чи правильно ви розмістили посилання та призначення чи зробили помилку.
Розгляньте можливість використання іншого імені, ніж python
/ python3
для вашого посилання чи псевдоніма.
Або додайте своє власне python
/ python3
посилання до PATH (як і віртуальне середовище), не змінюючи системних посилань.