获取导入模块的文件路径

时间:2009-04-08 11:30:21

标签: python

如何获取在python中导入的模块的文件路径。我正在使用Linux(如果重要的话)。

例如:如果我在我的家庭目录并导入一个模块,它应该返回我的主目录的完整路径。

7 个答案:

答案 0 :(得分:64)

模块和包具有__file__属性,该属性具有路径信息。如果模块是相对于当前工作目录导入的,那么您可能希望获得其绝对路径。

import os.path
import my_module

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

答案 1 :(得分:11)

我一直在用这个:

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

(编辑:这是“我在哪里”的功能 - 它返回包含当前模块的目录。我不太确定这是不是你想要的。)

答案 2 :(得分:6)

这将为您提供模块所在的目录:

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

答案 3 :(得分:5)

查找已加载模块的加载路径:

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

答案 4 :(得分: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)>

答案 5 :(得分:1)

我可能会迟到,使用AttributeError属性查找路径时,某些模块会抛出__file__。在这种情况下,可以使用__path__来获取模块的路径。

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

答案 6 :(得分:0)

尝试:

  

帮助(&#39; XXX&#39)

例如

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

NAME
    semanage

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