我有一个项目尝试动态创建一个新模块,然后在随后的exec
语句中尝试导入该模块。
import imp
s="""
class MyClass(object):
def __init__(self):
pass
def foo(self):
pass
"""
mod = imp.new_module("testmodule.testA")
exec s in mod.__dict__
exec "import testmodule.testA"
但这引发了这个例外:
Traceback (most recent call last):
File "test.py", line 14, in <module>
exec "import testmodule.testA"
File "<string>", line 1, in <module>
ImportError: No module named testmodule.testA
我尝试了几件事:将其添加到sys.modules,创建一个包含名称和模块的scope
dict。但没有骰子。当我在print locals()
语句中执行exec
时,我可以看到testmodule.testA,但我无法导入它。我在这里缺少什么?
谢谢。
答案 0 :(得分:1)
您需要将模块添加到sys.modules
的{{1}}结构中才能找到它:
import
但是你已经拥有了模块对象,再次导入它没什么意义。 import sys
sys.modules['testmodule.testA'] = mod
是对Python本来会导入&#39;的引用。 已经
以下内容可以无 mod
来电:
import
如果您需要mod.MyClass
调用中的模块,请将其添加到命名空间:
exec