模块importlib介绍
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中的新功能。
- Python模块的代码被重新编译并重新执行模块级代码,通过重用最初加载模块的loader来定义一组新的对象,这些对象被绑定到模块字典中的名称。扩展模块的
详情 http://python.usyiyi.cn/translate/python_352/library/importlib.html#module-importlib
模块importlib介绍的更多相关文章
- 基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)
本篇继续<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>,继续介绍基于Metronic的Bootstrap开发框架的工作模块功能,介绍工作流模块中相关业务表单的界 ...
- Winform开发框架中的内容及文档管理模块功能介绍
在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...
- 【转】Python标准模块--importlib
[转]Python标准模块--importlib 作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 P ...
- python shutil模块简单介绍
python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...
- request 模块详细介绍
request 模块详细介绍 request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装 ...
- tensorflow中slim模块api介绍
tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35 http://blog.csdn.net/guvcolie/article/details/77686 ...
- 【MM系列】SAP MM模块-组织结构介绍
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-组织结构介绍 ...
- 日志模块详细介绍 hashlib模块 动态加盐
目录 一:hashlib模块 二:logging 一:hashlib模块 加密: 将明文数据通过一系列算法变成密文数据(目的就是为了数据的安全) 能够做文件一系列校验 python的hashlib提供 ...
- MLX90640 红外热成像仪测温模块简要介绍说明
MLX90640 红外热成像仪测温模块简要介绍说明 (1) A 型和 B 型的区别 区别主要有以下几点 视场角不同: A 型为 110*75° , B 型为 55*35° ,通俗一点讲就是 A 型是广 ...
随机推荐
- ajax异步请求/同源策略/跨域传值
基本概念 Ajax 全称是异步的 JavaScript 和 XML . 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进 ...
- phpmyadmin杂记
看着坑爹的教程..我老是报错我也很无奈啊 以下几项必改 $cfg['blowfish_secret'] = ' ';//这里引号内是空格,实际上可以是任意内容, $cfg['Servers'][$i] ...
- vue 单页应用中微信支付的坑
vue 单页应用中微信支付的坑 标签(空格分隔): 微信 支付 坑 vue 场景 在微信H5页面(使用 vue-router2 控制路由的 vue2 单页应用项目)中使用微信 jssdk 进行微信支付 ...
- python接口测试-项目实践(四)拼接出预期结果
四 字符串拼接 空值处理 当某字段接口数据为空,则不显示相关字串. 比如字串原本是 "...,净资产收益率:ROE%",当接口数据中ROE为空,不显示',净资产收益率:%' 三目运 ...
- 使flex-direction: column的子元素height: 100%生效的办法
在flex-direction: column子元素里直接使用height:100%,height并不会被设置成100% <!DOCTYPE html> <html lang=&qu ...
- 用C++实现HTTP服务器 - Windows平台(开放源代码)
有时间了看一下 https://blog.csdn.net/querw/article/details/6593328 libevent也实现了一下http服务
- HashMap的工作原理-hashcode和equals原理的再次深入
前言 首先再次强调hashcode (==)和equals的真正含义(我记得以前有人会说,equals是判断对象内容,hashcode是判断是否相等之类): equals:是否同一个对象实例.注意,是 ...
- heidsql(mysql)安装教程和mysql修改密码
简单介绍安装 官网下载:https://mariadb.org/download/ 直接下载(mariadb-10.3.9-winx64.msi):https://github.com/weibang ...
- 一步一步部署SSIS包图解教程
本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...
- 【luogu P1343 地震逃生】 题解
题目链接:https://www.luogu.org/problemnew/show/P1343 菜 #include <queue> #include <cstdio> #i ...