如何获取在python中导入的模块的文件路径。我正在使用Linux(如果重要的话)。
例如:如果我在我的家庭目录并导入一个模块,它应该返回我的主目录的完整路径。
答案 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