python动态导入与静态导入包_Python importlib动态导入模块实现代码

本文主要介绍了Python中的动态导入和静态导入。静态导入通常使用`import module`或`from * import module`。动态导入适用于运行时决定导入哪个模块的情况,通过`importlib.import_module`实现。文中通过示例展示了如何动态导入scripts目录下的不同脚本并执行其功能。同时提到了`importlib`中的`find_loader`和`reload`函数。
摘要由CSDN通过智能技术生成

阅读目录

一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过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不多介绍了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值