2009-04-08 7 views
41

Comment puis-je obtenir le chemin du fichier d'un module importé en python? J'utilise Linux (si c'est important). Par exemple: si je suis dans mon répertoire et que j'importe un module, il devrait retourner le chemin complet de mon répertoire personnel.Obtention du chemin de fichier du module importé

+2

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

Répondre

6

Cela vous donnera le répertoire du module est:

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

modules et paquets ont un attribut __file__ qui a son chemin d'accès. Si le module a été importé par rapport au répertoire de travail actuel, vous voudrez probablement obtenir son chemin absolu.

import os.path 
import my_module 

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

Je me sers ceci:

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

(Edit: Ceci est une fonction « Où suis-je » - il retourne le répertoire contenant le module actuel, je ne suis pas tout à fait sûr si. c'est ce que tu veux).

5

Pour trouver le chemin de charge des modules déjà chargés:

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

Ou, tout simplement, '>>> os'. Vous comptez sur la représentation 'str()' du module. – YvesgereY

1

J'utilise cette méthode, qui s'applique aux non intégrés et modules intégrés:

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 

exemple:

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

Résultat:

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

Je pourrais être en retard ici, certains des modules passeraient par AttributeError en utilisant l'attribut pour trouver le chemin. Dans ce cas, on peut utiliser __path__ pour obtenir le chemin du module.

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

Essayez:

aide ('xxx')

Par exemple

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

NAME 
    semanage 

FILE 
    /usr/lib64/python2.7/site-packages/semanage.py 
Questions connexes