【发布时间】:2009-04-08 11:30:21
【问题描述】:
如何获取在 python 中导入的模块的文件路径。我正在使用 Linux(如果重要的话)。
例如:如果我在我的主目录中并导入一个模块,它应该返回我的主目录的完整路径。
【问题讨论】:
标签: python
如何获取在 python 中导入的模块的文件路径。我正在使用 Linux(如果重要的话)。
例如:如果我在我的主目录中并导入一个模块,它应该返回我的主目录的完整路径。
【问题讨论】:
标签: python
模块和包有一个__file__ 属性,其中包含其路径信息。如果模块是相对于当前工作目录导入的,您可能希望获取其绝对路径。
import os.path
import my_module
print(os.path.abspath(my_module.__file__))
【讨论】:
os.path.dirname(my_module.__file__) 获取普通文件夹名称,如下所述:stackoverflow.com/a/5003468/3734059
我一直在用这个:
import inspect
import os
class DummyClass: pass
print os.path.dirname(os.path.abspath(inspect.getsourcefile(DummyClass))
(编辑:这是一个“我在哪里”函数 - 它返回包含当前模块的目录。我不太确定这是否是你想要的)。
【讨论】:
这将为您提供模块所在的目录:
import foo
os.path.dirname(foo.__file__)
【讨论】:
我可能会迟到,有些模块在使用__file__ 属性查找路径时会抛出AttributeError。在这种情况下,可以使用__path__ 来获取模块的路径。
>>> import some_module
>>> somemodule.__path__
['/usr/lib64/python2.7/site-packages/somemodule']
【讨论】:
查找已加载模块的加载路径:
>>> import sys
>>> sys.modules['os']
<module 'os' from 'c:\Python26\lib\os.pyc'>
【讨论】:
>>> os。您依赖于模块的 str() 表示。
我一直在用这种方法,非内置模块和内置模块都适用:
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)>
【讨论】:
试试:
帮助('xxx')
例如
>>> help(semanage)
Help on module semanage:
NAME
semanage
FILE
/usr/lib64/python2.7/site-packages/semanage.py
【讨论】: