Я вижу, что все говорят, как исправить это странным копированием и т. Д., Но никто не сказал, почему возникает проблема.
Итак, позвольте мне объяснить для тех из вас, кто, как я, не хочет связываться с системными файлами только потому, что им так сказал кто-то из 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 работают и с более новыми версиями.
Уже. Но он может сломаться в будущем - если вы будете поддерживать свою систему достаточно долго.
- Изменение
python3
ссылки назад
Это отличное решение, потому что мы можем вернуться к тому, чтобы «никогда не менять ссылку».
"Но мне нравится просто печатать python
!" - Мне тоже это нравится! Вот как я вообще дошел до этой проблемы!
В общем, вам следует избегать ручного изменения системных ссылок - используйте update-alternatives
вместо этого для связывания разных версий . Это применимо к любому приложению с множеством версий. Это по-прежнему нарушает эти системные сценарии (потому что это действительно меняет ссылку), но вы можете легко переключаться туда и обратно, не беспокоясь о том, поместили ли вы ссылку и адрес в правильном порядке или допустили опечатку.
Рассмотрите возможность использования другого имени, чем python
/ python3
для вашей ссылки или псевдонима.
Или добавьте свою python
/ python3
ссылку в PATH (как это делают виртуальные среды), не изменяя системные ссылки.