【问题标题】:Can importlib.import_module(m) do `from m import *`?importlib.import_module(m) 可以执行 `from m import *` 吗?
【发布时间】:2021-12-25 04:54:06
【问题描述】:

文件module_x

module_x.py

A = 'x'

下面的脚本将从module_x.py打印'x',这是我需要的。

A = 'a'

from module_x import *
print(A)  # x

但是,我需要动态导入模块,所以我使用 importlib。但是,以下代码会打印“a”。

from importlib import import_module

A = 'a'

m = 'module_x'  # m will be passed as a parameter
x = import_module(m) 
print(A)  # a

x.A 的值是“x”,但我希望 import_module() 将 A 分配给“x”。

【问题讨论】:

标签: python


【解决方案1】:

应该这样做:

globals().update(import_module("module").__dict__)

如果你想导入特定的东西

var = import_module("module").var

【讨论】:

  • 不要像那样盲目地更新全局变量。模块命名空间(即__dict__ 属性)通常包含比 *-import 更多的内容。这可能会通过意外覆盖其一些属性(例如__name____package____loader____spec____doc__...
  • 过滤掉这些__x__属性就够了吗?
  • @ca9163d9 否。如果 module_x 命名空间在您的控制范围内,请在其中定义 __all__ 变量并访问它。我不知道用importlib.import_module 执行此操作的任何其他方法,它似乎没有动态公开 *-imports。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2016-09-14
  • 2013-09-11
相关资源
最近更新 更多