Je vois que tout le monde dit comment le réparer avec des copies étranges etc, mais personne n'a vraiment dit pourquoi le problème se produit.
Je m'explique, pour ceux d'entre vous qui, comme moi, ne veulent pas toucher aux fichiers système uniquement parce que quelqu'un sur SO leur a dit de le faire.
Le problème est le suivant :
-
de nombreux scripts scripts ont le shebang python3 codé en dur en eux. Vous pouvez le vérifier vous-même :
~$ grep -R "#!/usr/bin/python3" /usr/lib/*
/usr/lib/cnf-update-db:#!/usr/bin/python3
/usr/lib/command-not-found:#!/usr/bin/python3
/usr/lib/cups/filter/pstotiff:#!/usr/bin/python3
/usr/lib/cups/filter/rastertosag-gdi:#!/usr/bin/python3 -u
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:#!/usr/bin/python3
/usr/lib/language-selector/ls-dbus-backend:#!/usr/bin/python3
/usr/lib/python3/dist-packages/language_support_pkgs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/debug.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:#!/usr/bin/python3
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release:#!/usr/bin/python3
/usr/lib/update-notifier/package-data-downloader:#!/usr/bin/python3
/usr/lib/update-notifier/backend_helper.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt_check.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt-check:#!/usr/bin/python3
-
python apt package python-apt
/ python3-apt
est un paquetage système, donc c'est pour le système par défaut python
Ainsi, les scripts obtiendront toujours la version actuellement liée à python3
mais échouent car le paquet apt n'est pas présent.
Solution générale : Ne JAMAIS changer les valeurs par défaut python3
lien. Jamais. Cela s'applique également à python
lien - si une application a été écrite en Python2 avec d'anciens éléments syntaxiques qui ne fonctionnent pas en Python3, l'application ne fonctionnera pas.
(Mon terminal s'est cassé de cette façon parce que j'utilise Terminator, qui est apparemment écrit en Python2.7 non compatible avec Python3).
Les solutions présentées ici suggèrent soit de copier/lier les fichiers de paquets apt, soit de modifier les fichiers de paquets apt. python3
lien.
Analysons les deux :
- Copie/lien du paquet apt
Ce site ne devrait pas être un problème car à partir d'environ Python3.4, tous les scripts python fonctionnent également sur les versions plus récentes.
Jusqu'à présent. Mais il peut se briser à l'avenir - si vous gardez votre système assez longtemps.
- Changer
python3
lien de retour
C'est une excellente solution car nous pouvons revenir à "ne jamais changer le lien".
"Mais j'aime avoir à taper juste python
!" - Je l'aime aussi ! C'est comme ça que je suis arrivé à ce problème en premier lieu !
-
En général, vous devriez éviter de changer manuellement les liens du système - utilisez update-alternatives
au lieu de lier les différentes versions . Cela s'applique à toute application comportant de nombreuses versions. Cela cassera toujours les systèmes scripts (parce que cela change le lien), mais vous pouvez passer de l'un à l'autre facilement, sans vous soucier de savoir si vous avez mis link et dest dans le bon ordre ou si vous avez fait une faute de frappe.
-
Envisagez d'utiliser un autre nom que python
/ python3
pour votre lien ou alias.
-
Ou ajoutez votre propre python
/ python3
à PATH (comme le font les environnements virtuels), sans modifier les liens du système.