2009-04-08 12 views
41

Wie kann ich den Dateipfad eines in Python importierten Moduls abrufen? Ich benutze Linux (wenn es darauf ankommt).Dateipfad des importierten Moduls abrufen

Beispiel: Wenn ich in meinem Home-Verzeichnis bin und ein Modul importiere, sollte es den vollständigen Pfad meines Home-Verzeichnisses zurückgeben.

+2

Duplizieren: http://stackoverflow.com/questions/247770/retrieving -python-modul-pfad –

Antwort

6

Ihr Dies wird das Verzeichnis gibt das Modul in ist:

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

Module und Pakete haben ein __file__ Attribut, das seine Pfadinformationen hat. Wenn das Modul relativ zum aktuellen Arbeitsverzeichnis importiert wurde, möchten Sie wahrscheinlich seinen absoluten Pfad ermitteln.

import os.path 
import my_module 

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

Ich habe das schon mit:

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

(Edit: Dies ist ein „wo bin ich“ Funktion - es das Verzeichnis gibt das aktuelle Modul enthält, ich bin mir nicht ganz sicher, ob. das ist, was du willst).

5

Um den Lastpfad der Module bereits geladen zu finden:

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

Oder, einfach gesagt, '>>> os'. Sie verlassen sich auf 'str()' Repräsentation des Moduls. – YvesgereY

1

Ich habe diese Methode wurde verwendet, die beiden nicht-integrierten und eingebauten Modulen gilt:

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 

Beispiel:

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

Ergebnis:

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

Ich könnte hier spät sein, einige der Module würden durch AttributeError bei Verwendung __file__ Attribut, um den Pfad zu finden. In diesem Fall kann man __path__ verwenden, um den Pfad des Moduls zu erhalten.

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

Versuchen:

Hilfe ('xxx')

Zum Beispiel

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

NAME 
    semanage 

FILE 
    /usr/lib64/python2.7/site-packages/semanage.py 
Verwandte Themen