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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
Python Process多进程实现过程
Oct 22 Python
Python中Subprocess的不同函数解析
Dec 10 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Keras实现DenseNet结构操作
Jul 06 Python
Python库安装速度过慢解决方案
Jul 14 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 Python
Python的logging模块基本用法
Dec 24 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
isset和empty的区别
2007/01/15 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
学习php中的正则表达式
2014/08/17 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
向左滚动文字 js代码效果
2013/08/17 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
给排水专业应届生求职信
2013/10/12 职场文书
客服主管岗位职责
2013/12/13 职场文书
开业庆典答谢词
2014/01/18 职场文书
产品开发计划书
2014/04/27 职场文书
小学社会实践活动总结
2014/07/03 职场文书
小学生安全责任书
2014/07/25 职场文书
股指期货心得体会
2014/09/13 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Python OpenGL基本配置方式
2022/05/20 Python
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript