无法调用动态导入的python模块

时间:2014-09-12 12:28:19

标签: python python-2.7 plugins import

我无法在python中访问动态导入的模块。

我的调用语法错误或导入无效。

stackoverflow.com上有很多主题可以处理动态导入 蟒蛇。然而,我采用了这个网站的代码:https://www.daniweb.com/software-development/python/code/238387/really-simple-plugins-loader-import-all-modules-in-a-folder-in-one-swoop

自动导入文件夹中的所有模块并返回字典。

代码:

import glob, imp
from os.path import join, basename, splitext

def importPluginModulesIn(dir):
    return dict( _load(path) for path in glob.glob(join(dir,'[!_]*.py')) )
def _load(path):
    name, ext = splitext(basename(path))
    return name, imp.load_source(name, path)

modules = importPluginModulesIn('modules_folder')
print modules

输出表明导入成功:

{'test_function': <module 'test_function' from 'modules_folder/test_function.py'>}

然而,建议的访问方法根本不会产生任何响应(应打印:“测试完成。”)

modules['test_function'].__name__

有任何建议如何解决这个问题? 谢谢!

编辑: Martijn Pieters让我意识到我实际上是在误解模块和功能。 (见下面的评论。) 现在我的问题是如何在我的代码框架内实际调用嵌入在模块中的test_function test_function.py?

EDIT2: modules_folder中test_function.py的内容:

import time

def test_function():  
    print('Start.')
    time.sleep(1)    
    print('Test complete.')

1 个答案:

答案 0 :(得分:0)

尝试做:

for name in modules:
    getattr(modules[name], name)()

它应该可以正常工作。