将x = _import _(“y”)与字典值一起使用时调用模块时出错

时间:2017-08-05 13:23:29

标签: python dictionary python-import

在使用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技术带来了问题。

1 个答案:

答案 0 :(得分:0)

虽然这不是一个好习惯,但您可以使用内置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)