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 不同对象比较大小示例探讨
Aug 21 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
python3中的md5加密实例
May 29 Python
python统计多维数组的行数和列数实例
Jun 23 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
python tkinter组件摆放方式详解
Sep 16 Python
python 命名规范知识点汇总
Feb 14 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
Python ellipsis 的用法详解
Nov 20 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
收音机的保养
2021/03/01 无线电
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python中的模块和包概念介绍
2015/04/13 Python
python生成器generator用法实例分析
2015/06/04 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
Exception类的常用方法
2012/06/16 面试题
英语教师岗位职责
2014/03/16 职场文书
中队活动总结
2014/08/27 职场文书
2014年实习生工作总结
2014/11/27 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
redis lua限流算法实现示例
2022/07/15 Redis
python中validators库的使用方法详解
2022/09/23 Python