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

标签 python getattr python-importlib

我有一个文件./model_scripts/medians.py,其中包含函数predict_volume()。 [下面给出的 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 )后,我将 __init__.py 添加到 model_scripts 目录中。但我仍然收到上述错误。

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)

关于Python:从名称为变量的文件导入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42656840/

相关文章:

python - imp.load_source : 'module' has no attribute 'foo' 出现问题

python - 后向算法隐马尔可夫模型,第 0 个索引(终止步骤)产生错误结果

php - 脚本语言中的美元表示法 - 为什么?

python - 如何在Python类中模拟.users.get?

python - 如何遍历模块的函数

python - 如何使用 __getattr__ 将方法委托(delegate)给属性?

python - 如何使用 importlib 加载带有自定义全局变量的 Python 模块?

python - 根据目录名称 : What are the consequences? 使用 importlib 加载同名类

python - BeautifulSoup - 输出中的空白行导致奇怪的无用 <tr></tr>

python - 如何在 python 中使用 re 模块匹配模式之间的行