importlib包的目的是双重的。一个是在Python源代码中提供import语句(以及扩展名为__import__()函数)的实现。这提供了可以移植到任何Python解释器的import的实现。这也提供了比在除了Python之外的编程语言中实现的实现更容易理解的实现。

第二个目的是,实现import的组件在此包中公开,使用户更容易创建自己的自定义对象(通常称为importer)以参与导入处理。

importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)

内建__import__()函数的实现。

注意

程序化导入模块应使用import_module()而不是此函数。

importlib.import_module(name, package=None)

导入模块。name参数指定要以绝对或相对术语导入的模块。pkg.mod..mod)。如果名称是以相对术语指定的,则参数必须设置为包的名称,该名称将作为解析包名称的锚点。import_module('.. mod', 'pkg.subpkg')将导入pkg.mod)。

import_module()函数用作importlib.__import__()的简化包装。这意味着函数的所有语义都派生自importlib.__import__()。这两个函数最重要的区别是import_module()返回指定的包或模块(例如,pkg.mod),而__import__()返回顶级包或模块pkg)。

如果您动态导入自解析器开始执行后创建的模块(例如,创建了一个Python源文件),则可能需要调用invalidate_caches()才能注意到新模块由进口系统。

在版本3.3中更改:父包会自动导入。

importlib.find_loader(name, path=None)

找到模块的加载器,可选择在指定的路径中。如果模块在sys.modules中,则返回sys.modules[name].__loader__(除非加载器None未设置,在这种情况下会引发ValueError)。否则,使用sys.meta_path的搜索完成。如果未找到加载程序,则返回None

点名称没有父级的隐式导入,因为需要加载它们,这可能不是所希望的。要正确导入子模块,您需要导入子模块的所有父包,并使用正确的参数path

版本3.3中的新功能。

在版本3.4中更改:如果__loader__未设置,则引发ValueError,就像属性设置为None

自版本3.4后弃用:改用importlib.util.find_spec()

importlib.invalidate_caches()

使存储在sys.meta_path的finder的内部缓存无效。如果finder实现invalidate_caches(),那么它将被调用以执行无效。如果在程序运行时创建/安装了任何模块,则应调用此函数,以确保所有查找程序都注意到新模块的存在。

版本3.3中的新功能。

importlib.reload(module)

重新载入先前导入的模块。参数必须是一个模块对象,因此必须先被成功导入。如果您已使用外部编辑器编辑了模块源文件,并希望在不离开Python解释器的情况下尝试新版本,这将非常有用。返回值是模块对象(如果重新导入会导致将不同的对象放置在sys.modules中,则可能不同)。

当执行reload()时:

  • Python模块的代码被重新编译并重新执行模块级代码,通过重用最初加载模块的loader来定义一组新的对象,这些对象被绑定到模块字典中的名称。扩展模块的init功能不再第二次调用。
  • 与Python中的所有其他对象一样,旧对象只有在引用计数下降到零后才被回收。
  • 模块命名空间中的名称将更新为指向任何新的或已更改的对象。
  • 对旧对象的其他引用(例如模块外部的名称)不会重新引用来引用新对象,如果需要,必须在每个命名空间中对其进行更新。

还有一些其他警告:

当模块被重新加载时,它的字典(包含模块的全局变量)被保留。名称的重定义将覆盖旧的定义,因此这通常不是问题。如果模块的新版本未定义由旧版本定义的名称,则旧定义将保留。如果它维护一个全局表或对象缓存,使用try语句可以测试表的存在并跳过其初始化,如果需要,这个特性可以用于模块的优势:

try:
cache
except NameError:
cache = {}

重新加载内建或动态加载的模块通常不是很有用。不建议重新加载sys__main__builtins和其他关键模块。在许多情况下,扩展模块不会被设计为初始化多次,并且可能在重新加载时以任意方式失败。

如果模块使用from ... import ...从另一个模块导入对象,则对其他模块调用reload()其中一个方法是重新执行from语句,另一个方法是使用import和限定名称(module.name t15>)。

如果一个模块实例化一个类的实例,重新加载定义该类的模块不会影响实例的方法定义 - 它们继续使用旧的类定义。对于派生类同样如此。

版本3.4中的新功能。

详情 http://python.usyiyi.cn/translate/python_352/library/importlib.html#module-importlib

模块importlib介绍的更多相关文章

  1. 基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)

    本篇继续<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>,继续介绍基于Metronic的Bootstrap开发框架的工作模块功能,介绍工作流模块中相关业务表单的界 ...

  2. Winform开发框架中的内容及文档管理模块功能介绍

    在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...

  3. 【转】Python标准模块--importlib

    [转]Python标准模块--importlib 作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 P ...

  4. python shutil模块简单介绍

    python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...

  5. request 模块详细介绍

    request 模块详细介绍 request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装 ...

  6. tensorflow中slim模块api介绍

    tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35   http://blog.csdn.net/guvcolie/article/details/77686 ...

  7. 【MM系列】SAP MM模块-组织结构介绍

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-组织结构介绍   ...

  8. 日志模块详细介绍 hashlib模块 动态加盐

    目录 一:hashlib模块 二:logging 一:hashlib模块 加密: 将明文数据通过一系列算法变成密文数据(目的就是为了数据的安全) 能够做文件一系列校验 python的hashlib提供 ...

  9. MLX90640 红外热成像仪测温模块简要介绍说明

    MLX90640 红外热成像仪测温模块简要介绍说明 (1) A 型和 B 型的区别 区别主要有以下几点 视场角不同: A 型为 110*75° , B 型为 55*35° ,通俗一点讲就是 A 型是广 ...

随机推荐

  1. Python爬虫《Python网络爬虫相关基础概念》

    引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那些好处?其实学习爬虫的原因和为我们以后发展带来的好处都是显而易见的,无论是从实际的应用还是从 ...

  2. JavaScript入门几个概念

    JavaScript入门几个概念 刚刚入门JavaScript的时候,搞懂DOM.BOM以及它们的对象document和window很有必要. DOM是为了操作文档出现的API,document是它的 ...

  3. socket programming

  4. Android java获取凌晨的时间戳

    这两天有一个需求是查询用户匹配的推荐信息,包含一个有效时间段,以天为单位,0时0分0秒这种. 通常java中有两种方案: 第一种:Calendar.这种比较简单,也最常见.代码如下: Calendar ...

  5. 关联关系的CRUD

    关联关系中的CRUD_Cascade_Fetch 1. hibernate_1700_one2many_many2one_bi_crud 2. 设定 cascade 可以设定在持久化时对于关联对象的操 ...

  6. Oracle 修改任何用户的密码

    1.通过sys用户以sysdba身份登陆: 2.修改用户密码:  alter user 用户名 identified by 密码; 比如修改system的密码为 manager : alter use ...

  7. ng-repeat和ng-options区别

    ng-repeat ="x in XXX" ng-options="x.*** for x in XXX“ ng-repeat 写法 <select> < ...

  8. vue2.x 随记

    1. 外部js调用vue的方法等 将vue实例中的this传入外部js文件(比如作为某方法的参数),即可访问传入实例的所有内容.调用该实例中子组件的方法,用$refs. 2. 路由参数 传递:vm.$ ...

  9. 如何让一个简单的maven项目支持one-jar 做成一个jar fatjar

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  10. 用trie树实现输入提示功能,输入php函数名,提示php函数

    参照刘汝佳的trie树 结构体 #include "stdio.h" #include "stdlib.h" #include "string.h&q ...