2014-10-04 4 views
1

새로운 모듈을 동적으로 생성하려고하는 프로젝트가 있고 그 다음에 exec 문이 해당 모듈을 가져 오려고합니다. 나는 몇 가지를 시도했습니다동적으로 생성 된 모듈에서 파이썬으로 코드 가져 오기

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 

:뿐만 아니라 이름과 모듈을 포함하는 scope 딕셔너리를 생성, sys.modules에에 추가

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" 

는 그러나이 예외가 발생합니다. 그러나 주사위는 없습니다. exec 문에 print locals()을 입력하면 testmodule.testA가 표시되지만 가져올 수는 없습니다. 내가 여기서 무엇을 놓치고 있니?

감사합니다.

답변

0

당신은 그것을 찾을 importsys.modules 구조에 모듈을 추가해야합니다 :

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

당신은 이미 그러나 모듈 개체가 훨씬 포인트는 다시 수입이 없다. mod은 파이썬이 그렇지 않은 경우 '가져 오기'에 대한 참조입니다. 은 이미입니다.

없이 import 전화 를 작동합니다 다음 : 당신이 exec 호출 모듈을해야하는 경우,

mod.MyClass 

이 네임 스페이스에 추가 :

exec 'instance = MyClass()' in {'MyClass': mod.MyClass} 
+0

음, 두 번째' exec' 문이 그 예입니다. 실제로는 첫 번째'exec'의 코드/모듈을 필요로하는 일부 코드의 직렬화 된 문자열 형식입니다. 그래서 기본적으로 모듈 객체를 생성하고 생성 된 모듈을 사용하는 메소드를 실행하고 일부 프로세스의 시작점 역할을합니다. – mottosan