如何找到从哪个目录导入模块,因为它需要加载同一目录中的数据文件。
编辑:
结合几个答案:
module_path = os.path.dirname(imp.find_module(self.__module__)[1])
得到了我想要的
这会起作用:
yourmodule.__file__
如果您想查找从以下位置导入对象的模块:
myobject.__module__
模块文件的路径在module.__file__
. 您可以使用它os.path.dirname
来获取目录。
以 re 模块为例:
>>> import re
>>> path = re.__file__
>>> print path
C:\python26\lib\re.pyc
>>> import os.path
>>> print os.path.dirname(os.path.abspath(path))
C:\python26\lib
请注意,如果模块在您当前的工作目录(“CWD”)中,您将只获得一个相对路径,例如foo.py
. 我养成了立即获取绝对路径的习惯,以防在使用模块路径之前更改 CWD。
如果您想通过指定module_name
为字符串来模块目录,即不实际导入模块,则使用
def get_dir(module_name):
import os,imp
(file, pathname, description) = imp.find_module(module_name)
return os.path.dirname(pathname)
print get_dir('os')
输出:
C:\Python26\lib
def foo():
print 'foo'
酒吧.py
import foo
import os
print os.path.dirname(foo.__file__)
foo.foo()
输出:
C:\Documents and Settings\xxx\My Documents
foo