题
我
如何才能找到哪个目录模块已经从进口的,因为它需要加载数据文件,该文件是在同一目录下。
编辑:
组合若干答案:
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
foo.py
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得到改变。
不隶属于 StackOverflow