赞
踩
importlib是一个模块,可以进行动态导入模块。
导入模块的对比:
示例代码:
- import importlib
- import time
-
- t1 = __import__('time')
- t2 = importlib.import_module('time')
-
- print(t1 is t2)
- print(t1 == t2)
-
- print(time is t1)
- print(time == t1)
- print(time is t2)
- print(time == t2)
-
- print(time is t1 is t2)
- print(time == t1 == t2)
运行结果:
importlib模块支持传入字符串来引入一个模块。创建两个简单的模块来验证这个功能。创建两个模块,分别为test.py和test2.py,代码如下所示,
- def main():
- print(__name__)
使用importlib来引入它们。新建一个文件与test.py和test2.py在同意目录下。
- import importlib
-
-
- def dynamic_import(module):
- return importlib.import_module(module)
-
-
- if __name__ == "__main__":
- module = dynamic_import('test')
- module.main()
-
- module_two = dynamic_import('test2')
- module_two.main()
运行结果:
验证模块是否存在
示例代码:
- import importlib
- import importlib.util # 只能这样导入util
-
-
- def check_module(module_name):
- module_spec = importlib.util.find_spec(module_name)
- if module_spec is None:
- print("Module :{} not found".format(module_name))
- return None
- else:
- print("Module:{} can be imported!".format(module_name))
- return module_spec
-
-
- def import_module_from_spec(module_spec):
- module = importlib.util.module_from_spec(module_spec)
- module_spec.loader.exec_module(module)
- return module
-
-
- if __name__ == "__main__":
- module_spec = check_module("fake_module")
- if module_spec:
- module = import_module_from_spec(module_spec)
- print(dir(module))
- print("*" * 100)
- module_spec = check_module("time")
- if module_spec:
- module = import_module_from_spec(module_spec)
- print(dir(module))
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。