2009-04-08 26 views
41

¿Cómo puedo obtener la ruta del archivo de un módulo importado en python. Estoy usando Linux (si es que importa).Obtención de la ruta del archivo del módulo importado

Por ejemplo: si estoy en mi directorio de inicio e importo un módulo, debería devolver la ruta completa de mi directorio personal.

+2

duplicado: http://stackoverflow.com/questions/247770/retrieving -python-module-path –

Respuesta

6

Esto le dará el directorio del módulo está en:

import foo 
os.path.dirname(foo.__file__) 
52

Módulos y paquetes de tener un atributo __file__ que tiene su información de la ruta. Si el módulo se importó en relación con el directorio de trabajo actual, es probable que desee obtener su ruta absoluta.

import os.path 
import my_module 

print os.path.abspath(my_module.__file__) 
9

He estado usando esto:

import inspect 
import os 
class DummyClass: pass 
print os.path.dirname(os.path.abspath(inspect.getsourcefile(DummyClass)) 

(Editar: Se trata de un "dónde estoy" función - Devuelve el directorio que contiene el módulo actual no estoy muy seguro de si. eso es lo que quieres).

5

Para encontrar el camino de carga de módulos ya cargados:

>>> import sys 
>>> sys.modules['os'] 
<module 'os' from 'c:\Python26\lib\os.pyc'> 
+0

O, simplemente, '>>> os'. Usted está confiando en la representación 'str()' del módulo. – YvesgereY

1

He estado usando este método, que se aplica tanto a los módulos incorporados en los no incorporados y:

def showModulePath(module): 
     if (hasattr(module, '__name__') is False): 
      print 'Error: ' + str(module) + ' is not a module object.' 
      return None 
     moduleName = module.__name__ 
     modulePath = None 
     if imp.is_builtin(moduleName): 
      modulePath = sys.modules[moduleName]; 
     else: 
      modulePath = inspect.getsourcefile(module) 
      modulePath = '<module \'' + moduleName + '\' from \'' + modulePath + 'c\'>' 
     print modulePath 
     return modulePath 

Ejemplo:

Utils.showModulePath(os) 
Utils.showModulePath(cPickle) 

Resultado:

<module 'os' from 'C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\os.pyc'> 
<module 'cPickle' (built-in)> 
0

Podría llegar tarde aquí, algunos de los módulos pasarían por AttributeError al usar el atributo __file__ para encontrar la ruta. En esos casos, uno puede usar __path__ para obtener la ruta del módulo.

>>> import some_module 
>>> somemodule.__path__ 
['/usr/lib64/python2.7/site-packages/somemodule'] 
0

Probar:

ayuda ('xxx')

Por ejemplo

>>> help(semanage) 
Help on module semanage: 

NAME 
    semanage 

FILE 
    /usr/lib64/python2.7/site-packages/semanage.py 
Cuestiones relacionadas