【问题标题】:What is the point of Python's importlib?Python 的 importlib 有什么意义?
【发布时间】:2015-02-03 02:27:55
【问题描述】:

这是“方便包装”吗:https://docs.python.org/2/library/importlib.html 只是提供另一种写作方式:

import path.to.my.module

有什么是你不能用正常的 import 语句做的吗?

【问题讨论】:

    标签: python import python-import


    【解决方案1】:

    它允许您在编码时导入您不知道名称的模块。

    例如,当我的应用程序启动时,我会遍历目录结构并在发现模块时加载它们。

    【讨论】:

      【解决方案2】:

      在 Python 2.7 中,importlib 不是超级有用。事实上,它唯一的特点就是import_module 函数,它可以让你从一个字符串名称中导入一个模块:

      >>> import importlib
      >>> importlib.import_module('sys')
      <module 'sys' (built-in)>
      >>> importlib.import_module('sys').version
      '2.7.8 (default, Jul  2 2014, 19:50:44) [MSC v.1500 32 bit (Intel)]'
      >>>
      

      请注意,您可以使用内置的__import__ 执行相同的操作,但通常首选使用import_module

      然而,在 Python 3.1 及更高版本中,importlib 的用途已得到扩展。根据documentation

      importlib 包的目的有两个。一种是提供一个 import 语句的实现(因此,通过扩展, __import__() 函数)在 Python 源代码中。这提供了import 的实现,可移植到任何 Python 解释器。 这也提供了一个更容易实现的参考实现 理解不是用一种编程语言实现的 蟒蛇。

      二、实现import的组件都暴露在这个包里, 使用户更容易创建自己的自定义对象(已知 一般作为进口商)参与进口过程。 自定义导入器的详细信息可以在PEP 302找到。

      总结,importlib 现在允许您访问 Python 的导入语句的内部,构建自定义查找器、加载器和导入器,设置导入钩子等等。

      事实上,从 3.3 版开始,importlib 包含导入语句本身的实现。您可以在 Using importlib as the Implementation of Import 下的 Python 3.3 中的新增功能页面上阅读相关内容。

      另外,importlib 将在未来版本的 Python 中替换与导入相关的旧模块。例如,旧的 imp 模块在 3.4 版中被弃用,取而代之的是 importlib

      考虑到所有这些,我想可以肯定地说importlib 在现代 Python 中非常重要。 ;)

      【讨论】:

      • 另请注意:从 Python 3.3 开始 import 语句本身是由 importlib 包实现的,而不是非常复杂的 C 代码。
      猜你喜欢
      • 2018-11-21
      • 2010-11-04
      • 1970-01-01
      • 2011-05-22
      • 2022-07-31
      • 2015-01-17
      • 2011-09-26
      • 2010-11-29
      • 2010-10-15
      相关资源
      最近更新 更多