2012-06-01 16 views
6

Digamos que tengo un módulo que no puede importar (hay una excepción al importarlo).¿Cómo encuentro la ruta para una importación de python fallida?

por ejemplo. test.py con el siguiente contenido:

print 1/0 

[Obviamente, esto no es mi archivo real, pero va a estar en un buen indicador]

Ahora, en el símbolo del pitón:

>>> import test 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test.py", line 1, in <module> 
    print 1/0 
ZeroDivisionError: integer division or modulo by zero 
>>> 

¿Cuál es la mejor forma de encontrar la ubicación de ruta/archivo de test.py?

[I podría recorrer Python's module search path mirando en cada directorio para el archivo, pero me gustaría pensar que debe haber una manera más sencilla ...]

Respuesta

14

utilizar el módulo imp. Tiene una función, imp.find_module(), que recibe como parámetro el nombre de un módulo y devuelve una tupla, cuyo tema es la segunda ruta de acceso al módulo:

>>> import imp 
>>> imp.find_module('test') # A file I created at my current dir 
(<open file 'test.py', mode 'U' at 0x8d84e90>, 'test.py', ('.py', 'U', 1)) 
>>> imp.find_module('sys') # A system module 
(None, 'sys', ('', '', 6)) 
>>> imp.find_module('lxml') # lxml, which I installed with pip 
(None, '/usr/lib/python2.7/dist-packages/lxml', ('', '', 5)) 
>>> imp.find_module('lxml')[1] 
'/usr/lib/python2.7/dist-packages/lxml' 
+0

perfecto. ¡Sabía que tenía que haber una respuesta simple (simplemente no podía encontrarla)! – Gerrat

+0

Qué enfoque diabólicamente simple. –

Cuestiones relacionadas