Python importlib动态导入模块实现代码
作者:starnight_cyber 发布时间:2022-07-31 05:52:25
标签:Python,importlib,模块
阅读目录
一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解。
而如果当我们需要在程序的运行过程时才能决定导入某个文件中的模块时,并且这些文件提供了同样的接口名字,上面说的方式就不适用了,这时候需要使用python 的动态导入。
importlib使用
如在scripts目录中保存着一些功能模块,向外提供类似的接口poc()和脚本描述信息description,需要传入一个参数target,当然脚本执行的功能是不一样的,以下只是举例:
starnight:EXP-M starnight$ ls scripts/
__init__.py __pycache__ test1.py test2.py test3.py
starnight:EXP-M starnight$ cat scripts/test1.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
description = 'it is a test1'
def poc(target):
print('it is a test1')
return True
而我们需要动态传入脚本名,来选用此时要执行的功能:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import importlib
script_name = input('please input script_name : ')# 手动输入脚本名
module = importlib.import_module('scripts.{}'.format(script_name))# 动态导入相应模块
func = module.poc('')# 执行脚本功能
print(module.description) # 获取脚本描述信息
please input script_name : test1
it is a test1
it is a test1
...
please input script_name : test3
it is a test3
it is a test3
当我们动态给定脚本名字时,就会动态的导入该模块,执行相应的功能。
importlib其他介绍
python doc: importlib
importlib中的几个函数:__import__、import_module、find_loader、invalidate_caches、reload
"Note Programmatic importing of modules should use import_module() instead of this function."
当进行编程时,使用import_module,如上使用该模块。
find_loader用来查找模块,reload重新载入模块,invalidate_caches不多介绍了。
来源:https://www.cnblogs.com/Hi-blog/p/8529297.html


猜你喜欢
- Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。可以通过下图来简单了解条件语句的执行过
- 简介Python有广泛丰富的第三方库,在没有特殊定制下,避免了重复造轮子。若我们想获取随机时间,可以自己写一个,但也可以通过第三方库,如ra
- 一、TensorFlow变量管理1. TensorFLow还提供了tf.get_variable函数来创建或者获取变量,tf.variabl
- 方法: 使用urlencode函数urllib.request.urlopen()import urllib.requestimport u
- 最近写一个BootStrap页面...因为功能需要所以决定一个页面解决所有问题,然后用jQuery来动态显示功能....然而这样做的话页面会
- 开发微信小程序过程中,有个需求需要用到日期时间筛选器,查看微信官方文档后,发现官方文档的picker筛选器只能单独支持日期或者是时间,所以为
- 题目描述给定一个只包括 '(',')','{','}','['
- 论证完使用target=_blank并非绝对错误之后,分场景探讨如何减少新开窗口。自有意识注意这个问题,是看到蓝色经典Plod大叔在04年提
- 本文实例讲述了python实现将pvr格式转换成pvr.ccz的方法。分享给大家供大家参考。具体实现方法如下:import zlibimpo
- Win8.1下安装Python3.6提示0x80240017错误,如何解决?定位原因缺少Windows补丁KB2999226解决方法到Mic
- Flask框架介绍Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开
- 人丑就要多读书,颜值不够知识来凑,至少你可以用书籍来武装你的大脑,拯救你的人生。TIOBE编程语言排行榜前20的语言入门书籍推荐
- 网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandl
- 爬取网址:http://www.ultramanclub.com/allultraman/使用工具:pycharm,requests进入网页
- 写在前面ufunc是universal function的缩写,意思是这些函数能够作用于narray对象的每一个元素上,而不是针对narra
- 目录OpenCV先决条件我们会在本文中涵盖7个主题读,写和显示图像imread():imshow():imwrite():读取视频并与网络摄
- 方法一相对引用:from … import base ,上级目录from … import ba
- 本文实例为大家分享了python计算日期之间的放假日期,供大家参考,具体内容如下代码如下:#encoding=utf-8 print
- 如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子:$unsafe_variable = $_
- 如下所示:$ary = array( array('t'=>1,'y'=>2), &