python动态导入包

在廖雪峰老师的python教程实战中的编写web框架一节中,见(https://www.liaoxuefeng.com/wiki/1016959663602400/1018490695712544),其中有一个函数add_routes,代码如下:

def add_routes(app, module_name):
    n = module_name.rfind('.')
    if n == (-1):
        mod = __import__(module_name, globals(), locals())
    else:
        name = module_name[n+1:]
        mod = getattr(__import__(module_name[:n], globals(), locals(), [name]), name)
    for attr in dir(mod):
        if attr.startswith('_'):
            continue
        fn = getattr(mod, attr)
        if callable(fn):
            method = getattr(fn, '__method__', None)
            path = getattr(fn, '__route__', None)
            if method and path:
                add_route(app, fn)

在廖雪峰老师代码的基础上,我作了一些修改。

使用相对简单的 import_module方法来动态导入视图函数(控制器)的包,而后使用 walk_packages方法来递归动态导入上述包中的所有模块。

import importlib
import pkgutil


base = importlib.import_module('app.controller')

for loader, module_name, is_pkg in  pkgutil.walk_packages(base.__path__, f'{base.__name__}.'):

    try:
        sub_module = __import__(module_name, fromlist=['get_submodule'])
    except ImportError as e:
        raise e

# 后面代码略

 

转载于:https://www.cnblogs.com/panchong/p/10995770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值