您的位置:首页 > 编程语言 > Python开发

python动态导入模块

2018-01-03 21:30 435 查看
官方推荐方法

import importlib

module = importlib.import_module('my_module')


其它方法

module = __import__('my_module')


使用示例:

import importlib

# 导入user.py模块
user = importlib.import_module('user')
# 调用user.py中的get_info()方法,打印信息
print(user.get_info())


user.py
文件代码:

def get_info():
return '姓名:小白, 年龄:20'


运行结果:

姓名:小白, 年龄:20


应用(动态导入指定目录下的所有模块,并返回导入模块的自定义变量和方法)

import glob
import importlib
import os

def import_modules(pathname: str) -> dict:
"""
导入指定路径或者目录下的模块,并返回模块信息

:param pathname: 要导入的模块路径(相对路径),可以导入指定目录下的模块,只要符合glob路径表达式写法即可
:return: 模块信息字典
"""
modules_dict = {}
module_paths = glob.glob(pathname)
for path in module_paths:
module_name = path.replace(os.sep, '.')[:-3]
module = importlib.import_module(module_name)
for element in dir(module):
# 获取用户自定义的函数和变量名称
if not element.startswith('__'):
modules_dict[element] = eval('module.{}'.format(element))

return modules_dict

if __name__ == '__main__':
# 导入views目录下的所有模块,并打印模块信息
module_info = import_modules('views/**.py')
print(module_info)


运行结果:

{'add_menu': <function add_menu at 0x02FCFFA8>, 'delete_menu': <function delete_menu at 0x02FDDE40>, 'update_menu': <function update_menu at 0x02FDDC00>, 'add_user': <function add_user at 0x0305EF60>, 'delete_user': <function delete_user at 0x0305EFA8>, 'update_user': <function update_user at 0x0305E978>, 'user_name': 'xxx'}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息