从Python中动态创建的模块导入代码

时间:2014-10-04 13:03:11

标签: python python-import python-exec

我有一个项目尝试动态创建一个新模块,然后在随后的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,但我无法导入它。我在这里缺少什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要将模块添加到sys.modules的{​​{1}}结构中才能找到它:

import

但是你已经拥有了模块对象,再次导入它没什么意义。 import sys sys.modules['testmodule.testA'] = mod 是对Python本来会导入&#39;的引用。 已经

以下内容可以 mod来电:

import

如果您需要mod.MyClass 调用中的模块,请将其添加到命名空间:

exec