importlib.import_module(name, package=None)
动态引入引入一个模块。name可以是相对路径和绝对路径,如果是相对路径的话,这package就是相应的包名
foo.py文件
<pre>
coding:UTF-8
def main():
print(name)
</pre>
与foo.py同一文件夹下的文件
<pre>
import importlib
def dynamic_import(module):
return importlib.import_module(module)
if __name__ == '__main__':
module = dynamic_import('foo') #引入foo模块
module.main() #调用foo模块的main()方法
</pre>
importlib.util.find_spec(name, package=None)
模块导入检测
<pre>
import importlib
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')
module_spec = check_module('collections')
if module_spec:
module = import_module_from_spec(module_spec)
print(module)
Module:fake_module not found
Module:collections can be imported!
<module 'collections' from 'C:\Program Files\Python36\lib\collections\init.py'>
</pre>