Python importlib动态导入模块实现代码


Posted in Python onApril 16, 2020

阅读目录

一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过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不多介绍了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
Python中zip()函数用法实例教程
Jul 31 Python
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
简单介绍Python中的几种数据类型
Jan 02 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
Python 中 Shutil 模块详情
Nov 11 Python
pandas数据拼接的实现示例
Apr 16 #Python
python 生成任意形状的凸包图代码
Apr 16 #Python
Python telnet登陆功能实现代码
Apr 16 #Python
基于python 凸包问题的解决
Apr 16 #Python
python实现交并比IOU教程
Apr 16 #Python
python 弧度与角度互转实例
Apr 15 #Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 #Python
You might like
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
写出高质量的PHP程序
2012/02/04 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
phpinfo的知识点总结
2019/10/10 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
使用js实现数据格式化
2014/12/03 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
微信小程序实现留言板
2018/10/31 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
python元组操作实例解析
2014/09/23 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python如何计算语句执行时间
2019/11/22 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Python hashlib模块的使用示例
2020/10/09 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
力学专业毕业生自荐信
2013/11/17 职场文书
小区推广策划方案
2014/06/06 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
学生个人总结范文
2015/02/15 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
《颐和园》教学反思
2016/02/19 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android