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

加载调用这个函数的包下的所有模块 python函数

2014-04-17 17:14 363 查看
autodiscover.py     

#!/usr/bin/env python

#用来加载调用这个函数的包下的所有模块:

check = lambda f : not f.startswith('_') and f.endswith('.py')

def autodiscover(filename, filter=None):

    if not filter:

        filter = check

    exec_lines = []

    cur_dir = osp.abspath('.')

    abspath = osp.abspath(osp.dirname(filename))

    #print "&&&&&&cur_dir:%s&&abspath:%s&&***filename:%s&&&%s" %(cur_dir,abspath,filename,osp.dirname(filename))

    sys.path.insert(0, abspath)

    os.chdir(abspath)

    

    all_modules = []

    for path, dirs, files in os.walk('.'):

        modules = [f[:-3] for f in files if check(f)]

        if not modules:

            continue

        all_modules.append(modules)     

    

        if path == '.':

            exec_lines.append("import %s"  % (','.join(modules)))

        else:

            import_path = '.'.join([x for x in path.split(os.path.sep) if x != '.'])

            exec_lines.append("from %s import %s" % (import_path, ', '.join(modules)))

    exec('\n'.join(exec_lines))

    os.chdir(cur_dir)

    sys.path.pop(0)

    return all_modules
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐