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

Get path for every file python loads when importing modules

我正在尝试创建一个包含 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 文件。有没有更好的方法来找到它们,或者只要找到的文件是目录,我就应该简单地添加它们?此方法是否会遗漏任何其他文件。

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