首页 > 解决方案 > Python:通过变量从库中导入所有对象

问题描述

我想通过变量从库中导入所有对象。我知道如何从库中导入所有对象:

from package import *

我知道如何通过变量导入库:

import importlib

var = 'package'
package = importlib.import_module(var)

但是,我无法弄清楚如何将这两个目标结合起来。它看起来不importlib.import支持这一点。任何人都可以帮忙吗?

注意:我知道以这种方式绕过命名空间的危险(并且任何对我的询问使用潜在答案的人都应该熟悉这些危险)。我只打算用它来快速开发和测试一些算法,并计划用我的文件中的各个对象的明确名称来发布我的代码。

编辑:我想出了一个最小的例子。假设我在同一个目录中有三个文件:

辅助1.py

var = 'aux2'

辅助2.py

a = 0
b = 1

主文件

import importlib

from aux1 import var
aux2 = importlib.import_module(var)

如果我运行 main.py,我可以访问aandb作为aux2.aand aux2.b,但我希望它们成为全局变量。main.py为了做到这一点,最后需要什么?

标签: pythonimportpython-importlib

解决方案


您可以遍历从__dict__返回的模块的属性,如果它不以 开头,则import_module将该项目添加到。globals()__

import importlib

var = 'package'
package = importlib.import_module(var)

for name, value in package.__dict__.items():
    if not name.startswith("__"):
        globals()[name] = value

如果您只想导入 的某些成员package,则可以使用getattr()默认值None

imports = ['obj1', 'obj2', 'obj3']
for name in imports:
    value = getattr(package, name, None)
    if value is not None:
        globals()[name] = value

推荐阅读