导入模块时获取每个文件python加载的路径

时间:2015-07-08 00:30:32

标签: python python-import

我试图创建一个包含python脚本所依赖的所有模块的目录。而不是手动追踪所有这些文件,我想自动找到这些文件python导入它们。为此,我已将模块查找器添加到sys.meta_path

import sys, imp
class ImportPrint(object):
    def find_module(self, name, path=None):
        toks = name.split(".")
        pre, loc = ".".join(toks[:-1]), toks[-1]
        try: 
            module_info = imp.find_module(loc, path)
        except ImportError:
            module_info = imp.find_module(loc)
        if module_info[0]: module_info[0].close
        print "A", name, module_info[1]
        return None
sys.meta_path = [ImportPrint()]

import mymod1, mymod2, etc..

这几乎可行,但__init__.py文件找不到这种方式。有没有更好的方法来找到它们,或者我应该只是在找到的文件是目录时匆匆添加它们?这种方法是否会遗漏任何其他文件。

1 个答案:

答案 0 :(得分:0)

根据documentation for sys.meta_path,您的find_module方法将被调用,path参数设置为包的路径(如果它是1)。为什么不在os.path.join(path, '__init__.py')存在时使用path