有时候希望从配置文件或者其他字符串等中获取要被动态加载module,但是字符串类型的数据是无法用import导入,如
>>>import 'math'
File "", line 1
import 'math'
^
SyntaxError: invalid syntax
遇到如此场景,使用__import__来解决,示例:
>>>__import__('math')
<module 'math' (built-in)>
Python 提供内建函数 import 动态加载 module,import 的用法如下:
__import__ (name[, globals[, locals[, fromlist[, level]]]])
>>>math_module = __import__('math')
>>>math_module.log(2)
0.6931471805599453
import本质上是调用__import__加载module的,示例:
import math
本质是调用如下函数实现
math =__import__('math',globals(), locals(), [], -1)
__import__并不支持class, object的动态导入,只支持module的动态导入。示例:
两者导入的都是os模块
__import__('os')
<module 'os' from 'C:\\Anaconda3\\envs\\showtools\\lib\\os.py'>
__import__('os.path')
<module 'os' from 'C:\\Anaconda3\\envs\\showtools\\lib\\os.py'>
动态导入class, object:可以采用openstack的 oslo.utils