2011-07-08 15 views
7

He estado haciendo algunas investigaciones previas sobre este error. Aquí hay algunas explicaciones relacionadas con StackOverflow, aunque las soluciones sugeridas no tienen ninguna relación.AttributeError: el objeto 'module' no tiene atributo 'maketrans'

Cuando intento importar Gtk de gi.repository, se bloquea con el siguiente resultado:
bash-4.2$ python3 Python 3.2 (r32:88445, Feb 21 2011, 21:11:06) [GCC 4.6.0 20110212 (Red Hat 4.6.0-0.7)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

>>> from gi.repository import Gtk 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib64/python3.2/site-packages/gi/importer.py", line 76, in load_module 
dynamic_module._load() 
File "/usr/lib64/python3.2/site-packages/gi/module.py", line 251, in _load 
overrides_modules = __import__('gi.overrides', fromlist=[self._namespace]) 
File "/usr/lib64/python3.2/site-packages/gi/overrides/Gtk.py", line 400, in <module> 
class MessageDialog(Gtk.MessageDialog, Dialog): 
File "/usr/lib64/python3.2/site-packages/gi/overrides/Gtk.py", line 404, in 
MessageDialog 
type=Gtk.MessageType.INFO, 
File "/usr/lib64/python3.2/site-packages/gi/module.py", line 127, in __getattr__ 
ascii_upper_trans = string.maketrans(
AttributeError: 'module' object has no attribute 'maketrans' 

Como se trata de una importación directamente desde la consola de Python y no mediante la ejecución de un script Python archivo Pongo Ni siquiera tengo una idea de cómo manejar esto.

+1

parece que su importación de un módulo de Python 2 con Python 3 como 'string.maketrans' está ausente en Python 3 –

Respuesta

10

Ok, logré que funcione. A pesar de una solución alternativa sucio:

he modificado /usr/lib64/python3.2/site-packages/gi/module.py

en línea 127 Substituí string.maketrans con str.maketrans por lo que cumple con Python 3 docs.

Espero ser útil para cualquier persona en mis circunstancias.

Hugo

3

Esto parece ser un error conocido bug737375 y lo arreglaron (casi como una solución propia Hugo).

Puede encontrar la solución en la rama principal del repositorio pygopbject aquí:
http://git.gnome.org/browse/pygobject/commit/?id=8f89ff24fcac627ce15ca93038711fded1a7c5ed

De todos modos voy a volver a escribir aquí lo que está en el diff, por lo que tal vez voy a ahorrar algo de tiempo :)

A partir del archivo: /usr/lib64/python3.2/site-packages/gi/module.py

el usuario debe sustituir:

import string 

con:

try: 
    maketrans = ''.maketrans 
except AttributeError: 
    # fallback for Python 2 
    from string import maketrans 

Y de nuevo replace (alrededor de la línea 130):

ascii_upper_trans = string.maketrans(

con:

ascii_upper_trans = maketrans(
+0

Esta es la exacta solución necesaria, lamentablemente. Gracias. – leetNightshade

+0

Eso es lo que obtuve cuando intenté importar. desde importación de cadenas maketrans ImportError: no se puede importar el nombre 'maketrans' –

1

yo estaba tratando de ejecutar string.maketrans usando Jupyter portátil y el mensaje de error:

the module string has no attribute maketrans.

Cambiar el código a str.maketrans hizo el truco. Hay que señalar sin embargo que no tenía que hacer ningún cambio en el:

/usr/lib64/python3.2/site-packages/gi/module.py 
Cuestiones relacionadas