获取导入模块的文件path
我怎样才能得到在Python中导入模块的文件path。 我正在使用Linux(如果重要)。
例如:如果我在我的家目录,并导入一个模块,它应该返回我的主目录的完整path。
模块和包有一个__file__
属性,有它的path信息。 如果模块是相对于当前工作目录导入的,则可能需要获取其绝对path。
import os.path import my_module print os.path.abspath(my_module.__file__)
我一直在使用这个:
import inspect import os class DummyClass: pass print os.path.dirname(os.path.abspath(inspect.getsourcefile(DummyClass))
(编辑:这是一个“我在哪里”function – 它返回包含当前模块的目录。我不太确定这是你想要的)。
这会给你模块所在的目录:
import foo os.path.dirname(foo.__file__)
要find已经加载的模块的加载path:
>>> import sys >>> sys.modules['os'] <module 'os' from 'c:\Python26\lib\os.pyc'>
我一直在使用这个方法,它适用于非内置模块和内置模块:
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)>