5.10. 参考文献
导入机制自 Python 诞生之初至今已发生了很大的变化。 原始的 包规格说明 仍然可以查阅,但在撰写该文档之后许多相关细节已被修改。
原始的 sys.meta_path
规格说明见 PEP 302,后续的扩展说明见 PEP 420。
PEP 420 为 Python 3.3 引入了 命名空间包。 PEP 420 还引入了 find_loader()
协议作为 find_module()
的替代。
PEP 366 描述了新增的 __package__
属性,用于在模块中的显式相对导入。
PEP 328 引入了绝对和显式相对导入,并初次提出了 __name__
语义,最终由 PEP 366 为 __package__
加入规范描述。
PEP 338 定义了将模块作为脚本执行。
PEP 451 在 spec 对象中增加了对每个模块导入状态的封装。 它还将加载器的大部分样板责任移交回导入机制中。 这些改变允许弃用导入系统中的一些 API 并为查找器和加载器增加一些新的方法。
脚注
参见 types.ModuleType
。
importlib 实现避免直接使用返回值。 而是通过在 sys.modules
中查找模块名称来获取模块对象。 这种方式的间接影响是被导入的模块可能在 sys.modules
中替换其自身。 这属于具体实现的特定行为,不保证能在其他 Python 实现中起作用。
在遗留代码中,有可能在 sys.path_importer_cache
中找到 imp.NullImporter
的实例。 建议将这些代码修改为使用 None
代替。 详情参见 Porting Python code。