【发布时间】:2021-11-08 05:01:26
【问题描述】:
在基于 ESP32/MicroPython 的项目中,我想从 RAM(重新)加载模块,而不必先将它们写入基于闪存的文件系统。 (这既费时又消耗闪存)
所以我的想法是检索例如module.py通过web,然后使用__import__,exec()等将其转换为实际模块。但我不知道怎么做。
其实我需要的和这个差不多:How to load a module from code in a string?
在 MicroPython 中没有 imp 或 importlib 甚至 types.ModuleType 模块,但至少你有 __import__。
有没有办法实现
my_code = 'a = 5'
mymodule = imp.new_module('mymodule')
exec(my_code, mymodule.__dict__)
没有imp.new_module?
我尝试使用sys.__class__('mymodule') 将模块类型从现有模块中偷运出来,但我得到了
>>> mymodule = sys.__class__('mymodule')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't create 'module' instances
【问题讨论】:
-
如果您只需要命名空间/
.__dict__,那么为什么不能只使用虚拟类而不是ModuleType?
标签: python import python-module micropython python-importlib