Не удается вызвать динамически импортированные модули python

Я не могу получить доступ к динамически импортированным модулям в python.

Либо мой синтаксис вызова неверен, либо импорт не работает должным образом.

В stackoverflow.com есть много тем, которые касаются динамического импорта в Python. Тем не менее, я принял код с этого сайта: https://www.daniweb.com/software-development/python/code/238387/really-simple-plugins-loader-import-all-modules-in-a-folder- в-одном-маха

Он автоматически импортирует все модули, присутствующие в папке, и возвращает словарь.

Код:

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'="">}
</module>

Тем не менее, предлагаемый метод доступа не дает ответа вообще (должен напечатать: "Test complete."):

modules['test_function'].__name__

Кто-нибудь предлагает, как это исправить? Благодарю!

EDIT: Martijn Pieters дал мне понять, что я действительно принимаю модуль и функцию. (См. Комментарии ниже.) Теперь мой вопрос заключается в том, как на самом деле, в рамках моего кода, вызвать test_function, встроенный в модуль test_function.py?

EDIT2: Содержимое test_function.py в modules_folder:

import time

def test_function(): 
 print('Start.')
 time.sleep(1) 
 print('Test complete.')
1 ответ

Попробуйте сделать:

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

Он должен работать нормально.

licensed under cc by-sa 3.0 with attribution.