1. 动态导入模块
支持字符串导入模块
foo.py
class Func:
def __init__(self):
self.test()
def test(self):
print(__name__)
test.py
import importlib
def dynamic_import(module):
return importlib.import_module(module)
if __name__ == '__main__':
result = dynamic_import('foo') # 以字符串形式导入 foo.py
print(result)
result.Func() # 调用 foo.py 中的 Func() 类
运行结果如下:
<module 'foo' from 'E:\Python_virtualenvs\for_django\Projects\算法\importlib 模块\foo.py'>
foo
2. 模块导入检查
导入模块之前检查模块是否存在
import importlib
import importlib.util
def check_module(module_name):
module_spec = importlib.util.find_spec(module_name)
if module_spec:
print('模块 %s 导入成功' % module_name)
return module_spec
else:
print('导入不存在模块 %s ' % module_name)
return None
if __name__ == '__main__':
module_spec = check_module('fake_module')
module_spec = check_module('foo')
print(module_spec)
if module_spec:
module = importlib.util.module_from_spec(module_spec)
print(module)
运行结果:
导入不存在模块 fake_module
模块 foo 导入成功
ModuleSpec(name='foo', loader=<_frozen_importlib_external.SourceFileLoader object at 0x000001DBEF9BC198>, origin='E:\Python_virtualenvs\for_django\Projects\算法\importlib 模块\foo.py')
<module 'foo' from 'E:\Python_virtualenvs\for_django\Projects\算法\importlib 模块\foo.py'>