我试图创建一个包含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
文件找不到这种方式。有没有更好的方法来找到它们,或者我应该只是在找到的文件是目录时匆匆添加它们?这种方法是否会遗漏任何其他文件。
答案 0 :(得分:0)
根据documentation for sys.meta_path,您的find_module
方法将被调用,path
参数设置为包的路径(如果它是1)。为什么不在os.path.join(path, '__init__.py')
存在时使用path
?