获取导入模块时加载的每个文件 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')
?
我正在尝试创建一个包含 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')
?