[英]Importing code from a dynamically created module in Python
我有一個項目嘗試動態創建一個新模塊,然后在隨后的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
字典。 但是沒有骰子。 我在exec
語句中exec
print locals()
時可以看到testmodule.testA,但是無法導入它。 我在這里想念什么?
謝謝。
您需要將模塊添加到sys.modules
結構中以便import
才能找到它:
import sys
sys.modules['testmodule.testA'] = mod
但是,您已經有了模塊對象,再次導入它沒有多大意義。 mod
是對Python否則已經 “導入”的內容的引用。
無需 import
調用即可執行以下操作:
mod.MyClass
如果您需要在exec
調用中使用該模塊,請將其添加到該名稱空間中:
exec 'instance = MyClass()' in {'MyClass': mod.MyClass}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.