簡體   English   中英

從Python動態創建的模塊中導入代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM