前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python importlib动态导入模块实现代码

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

作者头像
砸漏
发布2020-11-04 09:40:58
6060
发布2020-11-04 09:40:58
举报
文章被收录于专栏:恩蓝脚本

阅读目录

  一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解。

  而如果当我们需要在程序的运行过程时才能决定导入某个文件中的模块时,并且这些文件提供了同样的接口名字,上面说的方式就不适用了,这时候需要使用python 的动态导入。

importlib使用

  如在scripts目录中保存着一些功能模块,向外提供类似的接口poc()和脚本描述信息description,需要传入一个参数target,当然脚本执行的功能是不一样的,以下只是举例:

代码语言:javascript
复制
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

  而我们需要动态传入脚本名,来选用此时要执行的功能:

代码语言:javascript
复制
#!/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)    # 获取脚本描述信息
代码语言:javascript
复制
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不多介绍了。

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档