在import-hooks中提到,元钩子(meta hooks)被注册到sys.meta_path
中。此列表还包括查找器(finders)。那么元钩子和查找器有什么不同?它们是相同的东西吗?为什么要将它们保存在同一个地方?
在import-hooks中提到,元钩子(meta hooks)被注册到sys.meta_path
中。此列表还包括查找器(finders)。那么元钩子和查找器有什么不同?它们是相同的东西吗?为什么要将它们保存在同一个地方?
它们之间有细微的差别。这个文档对导入机制进行了详尽的讨论。
元钩子在导入处理开始时被调用。因此,它们可以参与所有类型的导入,包括内置模块或冻结模块等导入,以及通过sys.path
开始处理基于磁盘的模块位置。基本上,在这个层面上
路径钩子在导入处理过程中稍后被调用,处理每个sys.path
条目时。它们有机会返回一个对象,该对象将完全负责定位特定路径条目中的模块。例如,如果sys.path
包含[/usr/lib/Python3, /home/user/mypython]
,您可以提供一个路径钩子,它可以对项目mypython
中的模块进行非标准的定位操作。
这两个钩子都允许您提供一个查找器
,它可以完全负责在特定上下文中定位模块。例如,元路径钩子用于从zip
文件中导入模块。