Python 动态加载
本文介绍动态的Python配置加载,期望从配置文件根据字符串加载module或者方法
解决: 动态加载module问题(未加载),类似的函数还有eval(获取作用域内方法), getattr(获取对象的方法)等
例如配置文件:
>>> import 'os'
File "<ipython-input-1-69642997ed4d>", line 1
import 'os'
^
SyntaxError: invalid syntax
例如,通过__import__实现动态加载
os_module = __import__('os')
os_module.path
通过一个例子,可以知道__import__可以加载字符串组成的函数。
__import__ (name[, globals[, locals[, fromlist[, level]]]])
- name (required): 被加载 module 的名称
- globals (optional): 包含全局变量的字典,该选项很少使用,采用默认值 global()
- locals (optional): 包含局部变量的字典,内部标准实现未用到该变量,采用默认值 local()
- fromlist (Optional): 被导入的 submodule 名称
- level (Optional): 导入路径选项,默认为 -1,表示同时支持 absolute import 和 relative import
import的本质是调用__import加载module的,例如:
import os
# 最终的函数调用实现如下
os = __import__('os', globals(), locals(), [], -1)
如果,参数中代用"."
>>> __import__("os")
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> __import__("os.path")
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'