如何动态导入类似于Python中“import X from Y”语法的模块?

1 python python-import brownie

我正在努力实现:

from X import Y
Run Code Online (Sandbox Code Playgroud)

其中 Y 是仅在运行时才知道的模块的字符串名称。

我尝试过使用

module = importlib.import_module(Y, X)
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。我也不知道模块的路径,因为它仅在运行时存在于模块 Brownie 中,然后被删除。

非常感谢帮助。

Mad*_*ist 5

你几乎明白了,除了第二个参数是import_module包名称,而不是你想要的属性。当你想要一个模块的属性时,你必须首先运行整个模块的代码,因为 python 无法提前预测哪些行会产生副作用。

所以首先导入模块:

X = importlib.import_module('X')
Run Code Online (Sandbox Code Playgroud)

然后你需要从模块中获取属性:

Y = getattr(module, 'Y')
Run Code Online (Sandbox Code Playgroud)

当然,您可能不想创建临时变量X,所以您可以这样做

Y = getattr(importlib.import_module('X'), 'Y')
Run Code Online (Sandbox Code Playgroud)