it-swarm-es.com

"Ningún módulo llamado _struct" después de construir e instalar manualmente python 2.6

ejecutando Ubuntu 12.04, tenía el habitual python 2.7 en su lugar.

Necesitaba python 2.6, así que descargué la fuente e hice

./configure
make
Sudo make install

Un error, ya que no quería reemplazar mi sistema python. Ahora algunos programas dejaron de funcionar, p. gestor de actualizaciones con

ImportError: No module named gi.repository

Utilicé alternativas de actualización para hacer que python 2.7 vuelva a ser predeterminado, pero muchas aplicaciones python aún no se inician debido a que faltan algunos módulos.

¿Alguien puede dar una pista de lo que sucedió y cuál sería la mejor manera de solucionarlo?

Gracias por adelantado.

Editar:

Podría obtener alguna funcionalidad de apt-get para trabajar configurando mi propio enlace duro de/etc/python a /etc/python2.7. (Así que supongo que usar alternativas de actualización realmente no funcionó demasiado bien). Hice una actualización dist, que básicamente funcionó, pero gran parte del paquete de administración a través de apt-get todavía está roto. En particular, un problema con python-minimal impide muchas otras instalaciones de paquetes que quería hacer.

Setting up python-minimal (2.7.3-0ubuntu7) ...
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/local/lib/python2.7/compileall.py", line 16, in <module>
    import struct
  File "/usr/local/lib/python2.7/struct.py", line 1, in <module>
    from _struct import *
ImportError: No module named _struct
dpkg: error processing python-minimal (--configure):
 subprocess installed post-installation script returned error exit status 255

PD: La compilación 2.7 de la fuente siempre salía (también antes de dist-ugprade o update-alternative) con

make: *** [libinstall] Error 1

Actualmente, en make, hay más problemas ("Python compilación finalizada, pero no se encontraron los bits necesarios para compilar estos módulos: _bsddb bsddb185 bz2
dl imageop sunaudiodev
Para encontrar los bits necesarios, busque en setup.py en detect_modules () el nombre del módulo. ")

Como esto está un poco sobre mi cabeza, creo que estoy mejor con una nueva instalación desde cero.

5
zm0

Tuve un problema similar cuando bajé de debian/Testing a debian/Stable recientemente. Supongo que en algún lugar del proceso, python los módulos se corrompieron. Purgar y reinstalar python fue, como se señaló, un poco draconiano. Afortunadamente, me encontré con lo siguiente http://ubuntuforums.org/showthread.php?t=73569

Siguiendo esta sugerencia, probé el comando

for pkg in `dpkg --get-selections | egrep -v 'deinstall' | egrep python | awk '{print $1}'`; do  apt-get -y --force-yes install --reinstall $pkg ; done

para reinstalar cualquier cosa que tenga python en su nombre y que haya resuelto el problema.

5
Soroosh

Su instalación de python 2.6 probablemente ha cambiado muchas configuraciones y rutas.

Su mejor opción es reinstalar el intérprete predeterminado python

Sudo apt-get --reinstall install python python-support

No puedo probarlo, pero espero que funcione. Buena suerte.

Si no funciona, la única otra idea que tengo es instalar python 2.7 desde la fuente, y luego tratar de reinstalar la predeterminada nuevamente.

2
Javier Rivera

Encontré esencialmente el mismo problema, pero para python-minimal 2.7.11-1.

cat /var/lib/dpkg/info/python-minimal.postinst

Deberías obtener algo como esto:

#! /bin/sh
set -e

python2.7 -m compileall /usr/share/python/ >/dev/null

Ejecute el comando sin redirigir a>/dev/null (edite el archivo o: Sudo python2.7 -m compileall /usr/share/python/). Esto le mostrará dónde falla la configuración posterior a la instalación.

Ex:

Listing /usr/share/python/penemue/lib/python2.7/site-packages/gevent 
Compiling /usr/share/python/penemue/lib/python2.7/site-packages/gevent/_socket3.py ...
  File "/usr/share/python/penemue/lib/python2.7/site-packages/gevent/_socket3.py", line 183
    def makefile(self, mode="r", buffering=None, *,
                                                  ^
SyntaxError: invalid syntax

En mi caso, fue un paquete personalizado [python (construido usando dh-virtualenv) que vivía bajo/usr/share/python. Tuve que ejecutar dpkg -P penemue y finalmente eliminar el directorio /usr/share/python/penemue. Podría haber podido mover el directorio /usr/share/python/penemue fuera del camino.

Una vez que me deshice del código incorrecto, ejecutar Sudo apt-get install -f resolvió los problemas.

1
ytjohn

Supongo que accidentalmente sobrescribió el directorio predeterminado python (de alguna manera) y 2.6 es incompatible con lo que necesitan las aplicaciones/administrador de actualizaciones.

Pruebe Sudo apt-get purge python2 luego Sudo apt-get install python2. Esto debería purgar python de su sistema y reinstalarlo, convirtiéndolo en el predeterminado Python nuevamente.

La única otra idea es que obtuviste una mala fuente para 2.6 y, como tal, hizo una mala instalación que no estuvo mal suficiente para ser detectada por make ???

0
RPiAwesomeness