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发送arp欺骗攻击代码分析
Jan 16 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
Python数据结构之单链表详解
Sep 12 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
python从子线程中获得返回值的方法
Jan 30 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
python获得命令行输入的参数的两种方式
Nov 02 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
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
php实现webservice实例
2014/11/06 PHP
PHP实现的简单日历类
2014/11/29 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Python异常处理例题整理
2019/07/07 Python
python如何调用php文件中的函数详解
2020/12/29 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
EJB实例的生命周期
2016/10/28 面试题
文明风采获奖感言
2014/02/18 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python