2009-04-08 44 views
41

如何獲取以python導入的模塊的文件路徑。我正在使用Linux(如果它很重要)。例如:如果我在我的家目錄並導入一個模塊,它應該返回我的主目錄的完整路徑。獲取導入模塊的文件路徑

+2

重複:http://stackoverflow.com/questions/247770/retrieving -python-module-path – 2009-04-08 11:52:53

回答

6

這會給你的目錄中的模塊是:

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

模塊和包都具有其路徑信息的__file__屬性。如果模塊是相對於當前工作目錄導入的,則可能需要獲取其絕對路徑。

import os.path 
import my_module 

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

我一直在使用這樣的:

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

(編輯:這是一個「我在哪裏」的功能 - 它返回一個包含當前模塊的目錄,我如果不是很確定。那就是你想要的)。

5

要找到已經加載的模塊的負載路徑:我一直在使用這種方法

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

或者簡單地說,就是'>>> os'。你依賴於模塊的'str()'表示。 – YvesgereY 2013-12-31 17:06:46

1

,這適用於非內置和內置模塊:

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 

例如:

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

結果:

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

我可以在這裏遲到,有些模塊會通過AttributeError使用__file__屬性來查找路徑。在這種情況下,可以使用__path__來獲取模塊的路徑。

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

嘗試:

幫助( 'XXX')

例如

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

NAME 
    semanage 

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