我正在尝试动态加载模块,如here所述。你知道吗
我编写了一个脚本,它需要一些在某些系统上默认情况下可能无法安装的模块(例如requests
)。脚本代码假定已经完成了常规的import
(它使用requests.get
)。你知道吗
如果我使用上面链接中的代码,要导入requests
,我必须使用:
requests=importlib.import_module('requests')
但这会导致大量代码重复,因为我有几个模块。我不能在循环中使用它,因为变量名必须随导入的模块而更改。你知道吗
我发现我可以使用:
for m in list_of_modules:
locals()[m]=importlib.import_module(m)
一切的发生就像我做了常规的import
。
(当然,真正的代码捕获异常……)。你知道吗
所以问题是这有多有效/风险?太好了,是真是假?(Python2.7,如果有区别的话)
这显然是无效的。python2.7.15的Doc提到
locals()
函数:locals()
是程序了解函数块中变量列表的一种方法。它不是一种创建局部变量的方法。你知道吗如果您真的需要这样的东西,您可以使用本地映射、依赖由
import_module
更新的sys.modules
映射,或者更新globals()
映射。不管怎样,一旦加载了模块,它就存在于整个程序中(通过sys.module
映射),因此将其引用存储在本地符号表中是没有意义的。你知道吗因此,如果您真的需要导入动态构建的模块列表,我会:
相关问题 更多 >
编程相关推荐