将 x = _import_("y") 与字典值一起使用时调用模块时出错

Error calling modules when using x = _import_("y") with dictionary values

我无法理解使用 Python 中的 __import_ 函数导入包后调用包的问题。我会注意到使用通常的 import x as y 效果很好,但这对我来说是一个学习练习。我正在导入,然后检查多个包的版本,并了解更多关于 Python 的信息,我想通过使用字典来自动执行此操作。

我的字典是这样的:

pack = {"numpy": ["np", "1.7.1"]}

然后我用它来加载和检查模块:

for keys in pack.keys():
    pack[keys][0] = __import__(keys)
    print("%s version:      %6.6s (need at least %s)" %(keys, pack[keys][0].__version__, pack[keys][1])) 

这工作正常,但是当我稍后尝试调用包时,它无法识别它:x = np.linspace(0,10,30) 产生一个错误,说 np 无法识别,但这有效:x = pack[keys][0].linspace(0,10,30)

因为这只是我学习的一种方式,所以我也对任何可以改变我处理问题方式的解决方案感兴趣。我选择了字典,因为我至少听说过它们,并且我使用了 _import__ 函数,因为我被迫在我的字典值中使用引号字符或数字值。引用的字符给 import x as y 技术带来了问题。

虽然这不是一个好习惯,但您可以使用内置的 locals 函数动态创建变量。

所以,

for module, data in pack.items():
    locals()[data[0]] = __import__(module)
    nickname = locals()[data[0]]
    print("%s version:      %6.6s (need at least %s)" %(module, nickname.__version__, pack[module][1]))

输出:

numpy version:      1.12.1 (need at least 1.7.1)