2

如何找到从哪个目录导入模块,因为它需要加载同一目录中的数据文件。

编辑:

结合几个答案:

module_path = os.path.dirname(imp.find_module(self.__module__)[1])

得到了我想要的

4

4 回答 4

1

这会起作用:

yourmodule.__file__

如果您想查找从以下位置导入对象的模块:

myobject.__module__
于 2010-03-10T13:37:22.917 回答
1

模块文件的路径在module.__file__. 您可以使用它os.path.dirname来获取目录。

于 2010-03-10T13:37:29.167 回答
1

以 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。

于 2010-03-10T13:48:03.367 回答
1

如果您想通过指定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


foo.py

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
于 2010-03-10T13:50:59.620 回答