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下载FTP上的文件夹的实现代码
Feb 10 Python
Python标准库内置函数complex介绍
Nov 25 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
python中的常量和变量代码详解
Jul 25 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
详解Python3中ceil()函数用法
Feb 19 Python
详解爬虫被封的问题
Apr 23 Python
python datetime中strptime用法详解
Aug 29 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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
一个分页的论坛
2006/10/09 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python的sorted用法详解
2019/06/25 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
什么是.net的Remoting技术
2016/07/08 面试题
优秀技术工人先进材料
2014/02/17 职场文书
政协会议宣传标语
2014/10/09 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
宿舍管理制度范本
2015/08/07 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle