2009-04-08 25 views
41

Come posso ottenere il percorso del file di un modulo importato in python. Sto usando Linux (se è importante).Come ottenere il percorso del file del modulo importato

Ad esempio: se sono nella mia directory home e importa un modulo, dovrebbe restituire il percorso completo della mia home directory.

+2

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

risposta

6

Questo vi darà la directory il modulo è in:

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

moduli e pacchetti di avere un attributo __file__ che ha il suo informazioni sul percorso. Se il modulo è stato importato rispetto alla directory di lavoro corrente, probabilmente vorrai ottenere il suo percorso assoluto.

import os.path 
import my_module 

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

Sto usando questo:

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

(Edit: Questo è un "Dove mi trovo" la funzione - restituisce la directory che contiene il modulo corrente non sono abbastanza sicuro se. questo è ciò che vuoi).

5

Per trovare il percorso di carico di moduli già caricati:

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

Oppure, semplicemente, '' >>> os'. Stai facendo affidamento sulla rappresentazione 'str()' del modulo. – YvesgereY

1

Ho utilizzato questo metodo, che si applica sia moduli built-in non incorporati e:

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 

esempio:

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

Risultato:

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

Potrei essere in ritardo qui, alcuni dei moduli passerebbero attraverso AttributeError quando si utilizza l'attributo __file__ per trovare il percorso. In tal caso si può usare __path__ per ottenere il percorso del modulo.

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

Prova:

aiuto ('xxx')

Per esempio

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

NAME 
    semanage 

FILE 
    /usr/lib64/python2.7/site-packages/semanage.py 
Problemi correlati