5.6. 替换标准导入系统
替换整个导入系统的最可靠机制是移除 sys.meta_path
的默认内容,,将其完全替换为自定义的元路径钩子。
一个可行的方式是仅改变导入语句的行为而不影响访问导入系统的其他 API,那么替换内置的 import()
函数可能就够了。 这种技巧也可以在模块层级上运用,即只在某个模块内部改变导入语句的行为。
想要选择性地预先防止在元路径上从一个钩子导入某些模块(而不是完全禁用标准导入系统),只需直接从 find_spec()
引发 ModuleNotFoundError
而非返回 None
就足够了。 返回后者表示元路径搜索应当继续,而引发异常则会立即终止搜索。