我面临一个新挑战: 我的项目是这样组成的:
./Passive
/meteo
meteomanager.py # contain a function called meteomanager(param)
/cinema
cinemamanager.py # contain a function called cinemamanager(param)
...etc
我在每个子文件夹中都有一个_init__.py文件,并且我有50多个这样的子文件夹(文件夹是我项目中的一个模块)。 因此,为了动态收集所有模块,我使用importlib.import_module()获取所有库。在每个模块中,我都有一个“ MY_MODULE” manager.py(上面的示例)。因为我只知道我必须使用的模块的名称(例如,只是“ meteo”或“ cinema”),所以必须在参数中传递函数meteomanager(例如)的名称。
我想使用(例如):
myModToUse = importlib.import_module('Passive.meteo.meteomanager')
globals()[myModToUse.__name__+'meteomanager'](param)
但是它不能正常工作,我有一个错误:
globals()myModToUse。名称 +“ meteomanager” KeyError:'Passive.meteo.meteomanager.meteomanager'
我不了解发生了什么以及如何解决和正确使用它。 需要帮助:)
下面是我的代码:
def get_modules():
modules = []
projectFolder = './Passive/'
for module in os.listdir(projectFolder):
if os.path.isdir(projectFolder+module):
modules.append(projectFolder+module)
return modules
dicModules = {}
for modulePath in get_modules():
module = modulePath.split('/')[-1]
try:
dicModules[module] = importlib.import_module('Passive.'+module+'.'+module+'manager')
print('module',module,'IMPORTED')
except Exception as e:
print('for module',module,'-->',e)
# I obtain the name I have to use
moduleToUse = get_module_to_use()
# I obtain the param I have to give
paramToGive = get_param_to_give()
globals()[dicModules[moduleToUse].__name__+moduleToUse+'manager'](paramToGive)