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