2017-03-07 41 views
2

我有一个包含函数predict_volume()的文件./model_scripts/medians.py。 [在bash的终端的tree输出下面给出]Python:从名称为变量的文件导入函数

model_scripts 
├── __init__.py 
├── medians.py 
└── ... 

我需要导入该功能到另一个Python脚本其中Python脚本从该函数必须被导入(即medians.py)的名称的形式为一个字符串变量。我写的代码是:

model_name = 'medians' 
... 
model = getattr(__import__('model_scripts'), model_name) 
vol = model.predict_volume() 

,但我得到的第一线以下错误:

AttributeError: 'module' object has no attribute 'medians' 

在阅读其他答案(here),我添加了一个__init__.pymodel_scripts目录。但我仍然收到上述错误。使用importlib

This回答提示:

import importlib 
model_name = 'medians' 
... 
model = importlib.import_module('model_scripts.'+model_name) 
vol = model.predict_volume() 

希望了解为什么第方法是行不通的,但第二次却任何见解。

+0

首先是相当于从'导入model_scripts medians'和第二相当于'进口model_scripts.medians',这是两个不同的请求。 – cdhowie

+0

@cdhowie:是不是我通过输入'model = getattr(__ import __('model_scripts'),model_name)'与'model = model_scripts.medians'相同? – IM94

+0

应该是。这假设'model_scripts'甚至导出'medians'。 '从model_scripts导入中值'是否按照您认为应该的方式工作? – cdhowie

回答

2

此处__import__的正确语法是使用fromlist以及它。

以下作品(读here):

model = getattr(__import__('model_scripts', fromlist=[model_name]), model_name) 
相关问题