【发布时间】:2010-03-10 13:35:15
【问题描述】:
如何找到模块从哪个目录导入,因为它需要加载同一目录中的数据文件。
编辑:
结合几个答案:
module_path = os.path.dirname(imp.find_module(self.__module__)[1])
得到我想要的
【问题讨论】:
如何找到模块从哪个目录导入,因为它需要加载同一目录中的数据文件。
编辑:
结合几个答案:
module_path = os.path.dirname(imp.find_module(self.__module__)[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
def foo():
print 'foo'
bar.py
import foo
import os
print os.path.dirname(foo.__file__)
foo.foo()
输出:
C:\Documents and Settings\xxx\My Documents
foo
【讨论】:
这可行:
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。p>
【讨论】: