Ich sehe alle sagen, wie man es mit seltsamem Kopieren usw. behebt, aber niemand hat wirklich gesagt, warum das Problem auftritt.
Lassen Sie mich das erklären, denn diejenigen unter Ihnen, die mich mögen, möchten nicht nur mit Systemdateien herumspielen, weil ihnen jemand auf SO dies gesagt hat.
Das Problem ist, dass:
- In vielen Systemskripten ist Python3 Shebang fest codiert. Sie können es selbst überprüfen:
~$ 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
ist ein Systempaket, also für Standard-Systempython
Daher erhalten die Skripte immer die aktuell verknüpfte Version python3
, schlagen jedoch fehl, da das apt-Paket nicht vorhanden ist.
Allgemeine Lösung: Ändern Sie NIEMALS den Standardlink python3
. Je.Dies gilt auch für python
Links. Wenn eine App in Python2 mit einigen alten Syntaxelementen geschrieben wurde, die in Python3 nicht funktionieren, funktioniert die App nicht.
[Mein Terminal ist auf diese Weise kaputt gegangen, weil ich Terminator verwende, der anscheinend in Python2.7 geschrieben ist und nicht mit Python3 kompatibel ist.]
Die hier vorgestellten Lösungen empfehlen entweder das Kopieren / Verknüpfen der apt-Paketdateien oder das Ändern python3
Link zu .
Lassen Sie uns beide analysieren:
- Kopieren / Verknüpfen des apt-Pakets
Dies sollte kein Problem sein, da ab Python3.4 alle Python-Skripte auch auf neueren Versionen funktionieren.
Bisher. Aber es kann in Zukunft kaputt gehen - wenn Sie Ihr System lange genug behalten.
python3
Link zurück ändern
Dies ist eine großartige Lösung, da wir wieder zu "niemals den Link ändern" zurückkehren können.
"Aber ich mag es einfach zu tippen python
!" - Ich mag es auch! So bin ich überhaupt zu diesem Problem gekommen!
Im Allgemeinen sollten Sie vermeiden, Systemverknüpfungen manuell zu ändern. Verwenden Sie update-alternatives
stattdessen, um verschiedene Versionen zu verknüpfen . Dies gilt für jede App mit vielen Versionen. Dadurch werden diese Systemskripte weiterhin beschädigt (da dadurch der Link geändert wird). Sie können jedoch problemlos hin und her wechseln, ohne sich Gedanken darüber machen zu müssen, ob Sie Link und Ziel in die richtige Reihenfolge bringen oder einen Tippfehler machen.
Verwenden Sie möglicherweise einen anderen Namen als python
/ python3
für Ihren Link oder Alias.
Oder fügen Sie Ihren eigenen python
/ python3
Link zu PATH hinzu (genau wie in virtuellen Umgebungen), ohne die Systemverknüpfungen zu ändern.