Eu vejo todo mundo dizendo como consertar isso com cópias estranhas etc, mas ninguém disse realmente porque o problema ocorre.
Então, deixe-me explicar, para aqueles de vocês que gostam de mim, não querem mexer nos arquivos do sistema apenas porque alguém no SO disse isso a eles.
O problema é que:
- muitos scripts de sistema têm python3 codificado dentro deles. Você mesmo pode verificar:
~$ 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
é um pacote de sistema, então é para sistema padrão python
Assim, os scripts sempre obterão a versão atualmente vinculada python3
, mas falham porque o pacote apt não está presente.
Solução geral: NUNCA altere o python3
link padrão . Sempre. Isso também se aplica ao python
link - se um aplicativo foi escrito em Python2 com alguns elementos de sintaxe antigos que não funcionam no Python3, o aplicativo não funcionará.
[Meu terminal quebrou dessa forma porque eu uso o Terminator, que aparentemente foi escrito em Python2.7 e não é compatível com Python3.]
As soluções apresentadas aqui sugerem copiar / vincular os arquivos do pacote apt ou alterar o python3
link.
Vamos analisar ambos:
- Copiando / vinculando o pacote apt
Isso não deve ser um problema porque em torno do Python3.4 todos os scripts Python funcionam em versões mais recentes também.
Tão longe. Mas pode quebrar no futuro - se você mantiver o sistema por tempo suficiente.
- Alterando o
python3
link de volta
Esta é uma ótima solução porque podemos voltar a "nunca alterar o link"
"Mas eu gosto de ter que digitar apenas python
!" - Eu gosto disso também! Foi assim que cheguei a esse problema em primeiro lugar!
Em geral, você deve evitar alterar manualmente os links do sistema - use em update-alternatives
vez disso para vincular versões diferentes . Isso se aplica a qualquer aplicativo com muitas versões. Isso ainda quebrará os scripts do sistema (porque muda o link), mas você pode alternar facilmente, sem se preocupar se colocou link e dest na ordem certa ou cometeu um erro de digitação.
Considere usar outro nome que não seja python
/ python3
para o seu link ou alias.
Ou adicione seu próprio python
/ python3
link ao PATH (assim como os ambientes virtuais fazem), sem alterar os links do sistema.