Veo a todos diciendo cómo solucionarlo con copias extrañas, etc., pero nadie dijo realmente por qué ocurre el problema.
Permítanme explicarles, para aquellos de ustedes que como yo no quieren meterse con los archivos del sistema solo porque alguien en SO se lo dijo.
El problema es ese:
- muchos scripts del sistema tienen python3 shebang codificado en ellos. Puedes comprobarlo tú mismo:
~$ 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
es un paquete del sistema, por lo que es para el sistema predeterminado python
Por lo tanto, los scripts siempre obtendrán la versión actualmente vinculada python3
, pero fallarán porque el paquete apt no está presente.
Solución general: NUNCA cambie el python3
enlace predeterminado . Siempre. Esto también se aplica al python
enlace: si una aplicación se escribió en Python2 con algunos elementos de sintaxis antiguos que no funcionan en Python3, la aplicación no funcionará.
[Mi terminal se rompió de esa manera porque uso Terminator, que aparentemente está escrito en Python2.7 no es compatible con Python3].
Las soluciones presentadas aquí sugieren copiar / vincular los archivos del paquete apt o cambiar el python3
enlace.
Analicemos ambos:
- Copiar / vincular el paquete apt
Esto no debería ser un problema porque desde Python3.4 todos los scripts de Python también funcionan en versiones más nuevas.
Hasta aquí. Pero puede romperse en el futuro, si mantiene su sistema el tiempo suficiente.
- Cambio de
python3
enlace de nuevo
Esta es una gran solución porque podemos volver a "nunca cambiar el enlace"
"¡Pero me gusta tener que escribir solo python
!" - ¡A mí también me gusta! ¡Así fue como llegué a este problema en primer lugar!
En general, debe evitar cambiar manualmente los enlaces del sistema; utilice update-alternatives
en su lugar para vincular diferentes versiones . Esto se aplica a cualquier aplicación con muchas versiones. Esto aún romperá esos scripts del sistema (porque cambia el enlace), pero puede cambiar de un lado a otro fácilmente, sin preocuparse de si puso el enlace y dest en el orden correcto o si cometió un error tipográfico.
Considere usar otro nombre que no sea python
/ python3
para su enlace o alias.
O agregue su propio python
/ python3
enlace a PATH (como lo hacen los entornos virtuales), sin cambiar los enlaces del sistema.