• 5.10. 参考文献

    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 366package 加入规范描述。

    PEP 338 定义了将模块作为脚本执行。

    PEP 451 在 spec 对象中增加了对每个模块导入状态的封装。 它还将加载器的大部分样板责任移交回导入机制中。 这些改变允许弃用导入系统中的一些 API 并为查找器和加载器增加一些新的方法。

    脚注

    • 1
    • 参见 types.ModuleType

    • 2

    • importlib 实现避免直接使用返回值。 而是通过在 sys.modules 中查找模块名称来获取模块对象。 这种方式的间接影响是被导入的模块可能在 sys.modules 中替换其自身。 这属于具体实现的特定行为,不保证能在其他 Python 实现中起作用。

    • 3

    • 在遗留代码中,有可能在 sys.path_importer_cache 中找到 imp.NullImporter 的实例。 建议将这些代码修改为使用 None 代替。 详情参见 Porting Python code。