Problemas de Python 3.8.x en 20.04

Problemas de Python 3.8.x en 20.04

Ya estaba en camino de volver a una imagen de respaldo de mi MicroSD que tenía aproximadamente 1,5 semanas hasta que después de escribirla en una nueva tarjeta SanDisk Micro SD, el sistema de archivos ext4 dio un montón de errores de inodo durante el tiempo de arranque, todo en el El sistema operativo estaba más o menos totalmente roto y fsckbásicamente daba una lista increíble de cosas que estaban rotas a nivel del sistema de archivos. Es una tarjeta Sandisk Micro SD nueva, pero aparentemente durante el proceso de copia de seguridad, la corrupción de datos se coló por la puerta trasera.

Estoy ejecutando Ubuntu 20.04 en una Raspberry Pi 4B, lo que significa que se ejecuta en la arquitectura arm64, por lo que las sugerencias para descargar los paquetes .deb directamente desde kernel.org o instalar ie python3-minimalno funcionan, ya que no hay ninguno. candidatos de instalación para ARM64.

  • Soluciones que apuntan a .deb y otros paquetes de instalación que simplemente no existen para la arquitectura arm64.

  • También hubo muchos consejos desactualizados o completamente malos; además, ninguno de los métodos de restauración del sistema descritos en los manuales o dentro de la comunidad de usuarios de Ubuntu (¿CD de arranque en una Raspberry Pi?) no se aplica a 20.04 en la Raspberry Pi. 4B, al menos no todavía.

Mi instalación todavía avanza a pasos agigantados, pero el sistema de actualización apt/dpkg sigue prácticamente roto sin importar lo que intento. Intenté sin éxito descargar los paquetes .deb e instalarlos por separado.

En cuanto a este momento; Py3compile y Pyclean no se encuentran en ninguna parte y esos dos son los principales culpables de que dpkg/apt no funcione, por lo queesta respuestano funciona.

$ sudo apt install python3-all
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3-all is already the newest version (3.8.2-0ubuntu2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
4 not fully installed or removed.
Need to get 0 B/129 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up pychess (0.12.2-1build1) ...
/var/lib/dpkg/info/pychess.postinst: 6: pycompile: not found
dpkg: error processing package pychess (--configure):
 installed pychess package post-installation script subprocess returned error ex                                   it status 127
dpkg: error processing package python-pkg-resources (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
Setting up gir1.2-dee-1.0 (1.2.7+17.10.20170616-4ubuntu6) ...
/var/lib/dpkg/info/gir1.2-dee-1.0.postinst: 6: pycompile: not found
dpkg: error processing package gir1.2-dee-1.0 (--configure):
 installed gir1.2-dee-1.0 package post-installation script subprocess returned e                                   rror exit status 127
Setting up python3-minimal (3.8.2-0ubuntu2) ...
Traceback (most recent call last):
  File "/usr/bin/py3compile", line 28, in <module>
    import struct
  File "/usr/lib/python3.8/struct.py", line 13, in <module>
    from _struct import *
ModuleNotFoundError: No module named '_struct'
dpkg: error processing package python3-minimal (--configure):
 installed python3-minimal package post-installation script subprocess returned                                    error exit status 1
No apport report written because MaxReports is reached already
                                                              Errors were encoun                                   tered while processing:
 pychess
 python-pkg-resources
 gir1.2-dee-1.0
 python3-minimal
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)
  • Reinstalar sudo apt install --reinstall -f python3-alltampoco ayuda.
  $ sudo apt install --reinstall -f python3-all
  Reading package lists... Done
  Building dependency tree
  Reading state information... Done
  0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
  4 not fully installed or removed.
  Need to get 0 B/131 kB of archives.
  After this operation, 0 B of additional disk space will be used.
  (Reading database ... 1052975 files and directories currently installed.)
  Preparing to unpack .../python3-all_3.8.2-0ubuntu2_arm64.deb ...
  Unpacking python3-all (3.8.2-0ubuntu2) over (3.8.2-0ubuntu2) ...
  Setting up pychess (0.12.2-1build1) ...
  /var/lib/dpkg/info/pychess.postinst: 6: pycompile: not found
  dpkg: error processing package pychess (--configure):
   installed pychess package post-installation script subprocess returned error exit status 127
  dpkg: error processing package python-pkg-resources (--configure):
   package is in a very bad inconsistent state; you should
   reinstall it before attempting configuration
  Setting up python3-all (3.8.2-0ubuntu2) ...
  Setting up gir1.2-dee-1.0 (1.2.7+17.10.20170616-4ubuntu6) ...
  /var/lib/dpkg/info/gir1.2-dee-1.0.postinst: 6: pycompile: not found
  dpkg: error processing package gir1.2-dee-1.0 (--configure):
   installed gir1.2-dee-1.0 package post-installation script subprocess returned error exit status 127
  Setting up python3-minimal (3.8.2-0ubuntu2) ...
  Traceback (most recent call last):
    File "/usr/bin/py3compile", line 28, in <module>
      import struct
    File "/usr/lib/python3.8/struct.py", line 13, in <module>
      from _struct import *
  ModuleNotFoundError: No module named '_struct'
  dpkg: error processing package python3-minimal (--configure):
   installed python3-minimal package post-installation script subprocess returned error exit status 1
  No apport report written because MaxReports is reached already
                                                                Errors were encountered while processing:
   pychess
   python-pkg-resources
   gir1.2-dee-1.0
   python3-minimal
  needrestart is being skipped since dpkg has failed
  E: Sub-process /usr/bin/dpkg returned an error code (1)
  • sudo dpkg --configure -ay sudo apt -f installresultan en los mismos errores.
  • Las instrucciones de recuperación de dpkg (como para ieCómo reinstalar dpkg) tampoco funcionan ya que, por ejemplo, no hay los archivos necesarios en /var/cache/apt/archives/.

Intenté obtener los paquetes .deb directamente del sitio web de Ubuntu, extraerlos e instalarlos por separado.

Dado el hecho de que, según las publicaciones en el foro que he estado leyendo, la gente ha estado rompiendo su Ubuntu y otros sistemas basados ​​en Debian durante al menos los últimos diez años cada vez que algo se ha vuelto loco con Python, ya sea un error del usuario o un paquete que rompe cosas, ¿sería un poco más seguro hacer de alguna manera una solución fundamental en la forma en que se maneja la arquitectura dpkg/apt en Linux y aislar los módulos y dependencias de Python que necesitan para ejecutarse del resto del sistema operativo? O crear algún tipo de método de restauración del sistema a prueba de fallos en casos de este tipo de situaciones graves que parecen ser bastante frecuentes.

Respuesta1

Respondí a tu publicación anterior pero parece que el bloqueo causó algunos problemas.

Como mencioné en mi publicación original, puedes extraer manualmente los archivos .deb relevantes y reconstruir un Python improvisado para iniciarlo tú mismo. Parece quehttps://packages.ubuntu.com/focal/python3no tiene ningún espejo listado para arm64 pero, después de una breve búsqueda, encontréhttps://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/python3_3.8.2-0ubuntu2_arm64.deb.htmlque le proporciona todos los nombres de los paquetes y luego le indicahttp://ports.ubuntu.com/pool/main/p/python3.8/para descargar (este espejo tiene todos los paquetes arm64). Tendrá que comenzar con el paquete "python3" y profundizar manualmente en todas las dependencias para capturarlas todas. Parece que py3compileambos py3cleanestán enpaquete mínimo de python3

En segundo lugar, y lo digo habiendo cometido muchos errores, hay innumerables cosas que la gente puede hacer y sudoque pueden dejar un sistema inoperable y no existen salvaguardias realistas. ¿Debería sudo rmrequerir una advertencia/confirmación cada vez? Qué tal si sudo chmod? Por cada publicación sobre alguien que rompe su sistema con problemas de Python, probablemente pueda señalar muchas en las que la gente hizo algo malo con los permisos o eliminó el archivo incorrecto.

Respuesta2

Citaré mi experiencia: si intentas actualizar Pythonde la fuenteen su sistema, podráantorchasu sistema de una manera irreparable. La solución más rápida y sencilla en estos casos esreinstale su sistemao restaurar desde una imagen de copia de seguridad en buen estado yNOIntente actualizar Python desde la fuente.

La respuesta "reinstalar" se aplica atodoVersiones del sistema operativo, no solo instalaciones ISO.

Restaurar el sistema Python desde su 'imagen de respaldo' será complicado, por lo que también puede realizar una restauración completa del sistema desde su respaldo. O reinstale desde cero.


Como paraobteniendo Python más nuevo para sus propias necesidades, es posible que desee considerar el usoPyEnvque es un proyecto/herramienta que le permite tener múltiples versiones de Python instaladas en el espacio de usuario sin afectar su sistema Python y, por lo tanto, no daña su sistema Python. Porque actualizar Python a nivel del sistema lo dejará con un sistema roto en muchos casos.

Respuesta3

Sí, gracias a @Brian Turek, ¡mi sistema está funcionando nuevamente! Lo hice funcionar conectando SSH a mi caja y tomando los archivos .deb necesarios del enlace que señaló (http://ports.ubuntu.com/pool/main/p/python3.8/) con wget.

Primero tenía que instalar ( sudo dpkg -i) el libpython3.8-stdlib_3.8.5-2_arm64.debpaquete, luego el python3.8-minimal_3.8.5-2_arm64.debpaquete, y solo ENTONCES el python3.8_3.8.5-2_arm64.debpaquete se instalaría debido a que las dependencias no estaban equilibradas.

NOTA para las generaciones futuras (si las hay):El procedimiento de instalación para un sistema con una configuración de Python defectuosa puede variar; solo tenga cuidado de mirar, esté atento a los mensajes de error que ocurren durante la dpkginstalación con cada paquete; si no se instala porque depende de otra versión de alguna otra dependencia, búsquelo en la URL del repositorio que Brian originalmente vinculado a, instale primero el paquete requerido, si eso le da más molestias, entonces debe profundizar más e instalar esas dependencias rotas primero para "desatascar la taza del inodoro del Python que está allí", enjuagar y repetir hasta que todo esté solucionado.

Aún así, finalmente lo logré, mi sistema está nuevamente funcionando y estoy felizmente instalando todos los paquetes y actualizaciones desatendidas que habían estado pendientes debido a este problema.¡Gracias Brian Turek por tu ayuda! <3 Me ahorraste muchos años de psicoterapia.

PD: Todos los que odian y piensan que la única forma de arreglar un sistema con un Python roto es simplemente borrarlo todo y empezar desde cero, "¡Touché!" :-D

información relacionada