Python: 从名称为变量的文件中导入函数

Python: Import function from file whose name is a variable

我有一个包含函数 predict_volume() 的文件 ./model_scripts/medians.py。 [下面给出的 bash 终端中 tree 的输出]

 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) 后,我在 model_scripts 目录中添加了一个 __init__.py。但我仍然收到上述错误。

This 建议使用 importlib:

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

对于第一种方法为何无效而第二种方法有效的任何见解,我们将不胜感激。

此处 __import__ 的正确语法是同时使用 fromlist

以下作品(阅读here):

model = getattr(__import__('model_scripts', fromlist=[model_name]), model_name)