3

新しいモジュールを動的に作成しようとするプロジェクトがあり、その後の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()ステートメントで a を実行すると、testmodule.testA が表示されますexecが、インポートできません。ここで何が欠けていますか?

ありがとうございました。

4

1 に答える 1

1

モジュールを見つけるには、sys.modules構造体にモジュールを追加する必要があります。import

import sys
sys.modules['testmodule.testA'] = mod

ただし、既にモジュール オブジェクトがあり、再度インポートしてもあまり意味がありません。Python が既にmod「インポート」するものへの参照です。

以下は、呼び出しなしで機能します。import

mod.MyClass

呼び出しでモジュールが必要な場合は、execそこの名前空間に追加します。

exec 'instance = MyClass()' in {'MyClass': mod.MyClass}
于 2014-10-04T13:03:56.027 に答える