位置: 编程技术 - 正文

Python中标准模块importlib详解(python里模块)

编辑:rootadmin

推荐整理分享Python中标准模块importlib详解(python里模块),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python标准模板库,python标准模板库,python标准模板库,python标准模块有哪些,python标准模块有哪些,python标准模板库,python标准模块有哪些,python标准模板库,内容如对您有帮助,希望把文章链接给更多的朋友!

1 模块简介

Python提供了importlib包作为标准库的一部分。目的就是提供Python中import语句的实现(以及__import__函数)。另外,importlib允许程序员创建他们自定义的对象,可用于引入过程(也称为importer)。

什么是imp?

另外有一个叫做imp的模块,它提供给Python import语句机制的接口。这个模块在Python 3.4中被否决,目的就是为了只使用importlib。

这个模块有些复杂,因此我们在这篇博文中主要讨论以下几个主题:

&#;动态引入&#;检查模块是否可以被引入&#;引入源文件自身&#;第三方模块 import_from_github_com

2 模块使用

2.1 动态引入

importlib模块支持传入字符串来引入一个模块。我们创建两个简单的模块来验证这个功能。我们将会给予两个模块相同的接口,让它们打印名字以便我们能够区分它们。创建两个模块,分别为foo.py和bar.py,代码如下所示,

现在我们使用importlib来引入它们。让我们看看这段代码如何去做的。确保你已经把这段代码放在与上面创建的两个模块相同的目录下。

在这段代码中,我们手动引入importlib模块,并创建一个简单的函数dynamic_import。这个函数所做的就是调用importlib模块中的import_module函数,入参就是我们传入的字符串,然后返回调用结果。在代码段的下面,我们调用每个模块的main方法,将会打印出每个模块的名称。

在你的代码中,你可能不会大量这样做。当你只有一个字符串时,如果你想引入这个模块,importlib就允许你可以这么做。

2.2 模块引入检查

Python中标准模块importlib详解(python里模块)

Python有一个编码规范就是EAPP:Easier to ask for forgiveness than permision。意思就是经常假设一些事情是存在的(例如,key在词典中),如果出错了,那么就捕获异常。你可以看 Python标准模块--import 文章中我们尝试引入模块,当它不存在时,我们就会捕获到ImportError。如果我们想检查并观察一个模块是否可以引入而不是仅仅是猜测,该如何去做?你可以使用importlib。代码如下:

这里我们引入importlib模块的子模块util。在check_module函数中,我们调用find_spec函数来检查传入的字符串作为模块是否存在。首先,我们传入一个假的名称,然后我们传入一个Python模块的真实名称。如果你运行这段代码,你将会看到你传入一个没有安装的模块的名称,find_spec函数将会返回None,我们的代码将会打印出这个模块没有找到。如果找到了,我们就会返回模块的说明。

我们可以获取到模块的说明,然后使用它来真正的引入模块。或者你可以将字符串传入到import_module函数中,正如我们在2.1节中所学习到的一样。但是我们已经学习到如何使用模块的说明。让我们看一下上述代码中的import_module_from_spec函数。它接受由check_module函数返回的模块说明。我们将其传入到module_from_spec函数,它将会返回引入的模块。Python的官方文档推荐,在引入模块后执行它,所以我们下一步做的就是调用exec_module函数。最后我们返回这个模块,并且运行Python的dir函数来确认这个我们就是我们所期望的。

2.3 从源文件中引入

在这一节中,我想说明importlib的子模块util还有另外一个技巧。你可以使用util通过模块名和文件路径来引入一个模块。示例如下所示,

上述代码中,我们实际引入了logging模块,并将它传入到import_source函数。在这个函数中,我们首先获取到模块的实际路径和名称。然后我们将这些信息传入到util的spec_from_file_location函数中,这个将会返回模块的说明。一旦我们获取到模块的说明,我们就可以使用与2.2节相同的importlib机制来实际引入模块。

现在让我们来看一个精巧的第三方库,Python的__import__()函数直接引入github中的包。

2.4 import_from_github_com

这个精巧的包叫做import_from_github_com,它可以用于发现和下载github上的包。为了安装他,你需要做的就是按照如下命令使用pip,

这个包使用了PEP 中新的引入钩子,允许你可以从github上引入包。这个包实际做的就是安装这个包并将它添加到本地。你需要Python 3.2或者更高的版本,git和pip才能使用这个包。

一旦这些已经安装,你可以在Python shell中输入如下命令,

你如果看了import_from_github_com的源码,你将会注意到它并没有使用importlib。实际上,它使用了pip来安装那些没有安装的包,然后使用Python的__import__()函数来引入新安装的模块。这段代码非常值得学习。

2.5 总结

到这里,你已经了解到在你的代码中如何使用importlib和引入钩子。当然还有很多超出本文所覆盖的知识,如果你需要写一个自定义的引入器或者下载器,你需要花费很多时间来阅读官方文档和源码。

Python的时间模块datetime详解 datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是和1.datetime模块定义了5个类,分别是1.datetime.date:表示日期的类2.date

Python实现将一个大文件按段落分隔为多个小文件的简单操作方法 本文实例讲述了Python实现将一个大文件按段落分隔为多个小文件的简单操作方法。分享给大家供大家参考,具体如下:今天帮同学处理一点语料。语料

使用Python3制作TCP端口扫描器 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤。通过端口扫描我们可以了解到目标

标签: python里模块

本文链接地址:https://www.jiuchutong.com/biancheng/375522.html 转载请保留说明!

上一篇:Python 实现随机数详解及实例代码(python中随机数的用法)

下一篇:Python实现将一个大文件按段落分隔为多个小文件的简单操作方法(python中将)

  • 混合销售行为如何缴纳增值税税率
  • 企业所得税工会经费调整
  • 已缴纳车船税的车船在同一年度
  • 折扣方式销售货物增值税
  • 已认证的发票如何转出
  • 合伙人没有账目就说赔了合法吗
  • 桐木板芯销售
  • 库存冲红是什么意思
  • 购买商标权税率多少
  • 财务报告分析主要内容
  • 新成立的公司银行存款如何入账
  • 预付账款发票到货未到怎么做账
  • 企业所得税减免税额包括哪些
  • 企业获得的燃油补贴为什么还需要缴纳企业所得税呢?
  • 公司发给员工的奖金要交税吗
  • 一般纳税人购进货物用于免征增值税项目
  • a104000期间费用明细表
  • 工资三金是指哪三样
  • 增值税发票时效性
  • 邮局劳务费发票几个点
  • 计提所得税费用会计分录
  • 不动产测绘费谁交
  • 购货申请书
  • BIOS识别不了硬盘pe可以
  • 外贸公司要计提什么费用
  • 浅谈12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践
  • sbsetup.exe - sbsetup是什么进程 有什么用
  • 应交增值税视频讲解
  • 海关进口增值税怎么认证抵扣
  • window7无法正常启动怎么办
  • thinkphp3.2.3缓存漏洞
  • PHP:pcntl_wifexited()的用法_PCNTL函数
  • upload靶场搭建
  • 资产负债表中投资总额是什么
  • 用土地抵账合法吗
  • 外贸企业进项发票能是外贸企业吗
  • php checkbox使用
  • 原生js实现promise
  • javascript手机版
  • 减资资产负债表怎么填
  • tsar命令 收集服务器系统信息
  • 出口退税逾期申报,需申报出口货物收汇情况表
  • 酒店没有营业执照开业犯法吗
  • 记账和结账可以一起用吗
  • mongodb与mysql相比的优缺点
  • 小规模纳税人销售货物税率是多少
  • 企业分红所得需要缴纳企业所得税吗
  • 如何进行会计制度改革
  • 小企业会计准则和企业会计准则的区别
  • 房地产企业所得税预缴毛利率
  • 资产负债表的其他应收款怎么算出来的
  • 合伙企业对外投资需要全体合伙人同意吗
  • 出口报关金额怎么算
  • 现金日记账的结账方法
  • 政府补助计入哪个会计科目
  • 小规模纳税人计税销售额为不含税销售额
  • 民间非营利组织包括哪些单位
  • 电商行业的采购
  • 企业收到普通发票需要报税嘛
  • 财务会计制度的基本要求
  • 核销预收账款是否需要计提增值税
  • 凭证填制的标准要求
  • mysql中/g
  • Ubuntu系统中文输入法
  • linux系统讲解
  • 深度操作系统中的生活服务类软件有
  • win8.1快捷键
  • windows7更新补丁后蓝屏
  • opengl实现光线追踪
  • 字符有大小吗
  • javascript+
  • js折叠展开特效
  • JavaScript浏览器插件制作
  • 能用python做什么
  • JavaScript的removeChild()函数用法详解
  • 江苏国税电子税务局怎么申报
  • 电子税务局如何申报社保
  • 小规模纳税人开专票需要交税吗
  • 统计表主要业务内容
  • 德税手卷烟海淘
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设