모듈을 동적으로 가져오고 업데이트하고 싶습니다. 보다 효율적인 방법은 importlib
및 imp.reload
as suggested by abarnet을 사용하는 것입니다. 그러나 또 다른 해결책은 exec
과 compile
을 사용하는 것입니다. 문자열에 저장된 모듈을 호출하고 사용할 수있는 방법을 보여주는 샘플 스크립트가 있습니다. 그러나이 모듈을 함수 test
(아래 참조)에서 호출하면 작동하지 않고 오류 메시지 global name 'FRUITS' is not defined
이 표시됩니다. 나는 이것이 작동하지 않는 이유를 지적하기 위해 눈의 신선한 쌍을 필요로한다. 감사.exec를 사용하여 모듈을 동적으로 업데이트하고 파이썬에서 컴파일
module_as_string = """
class FRUITS:
APPLE = "his apple"
PEAR = "her pear"
class foo(object):
def __init__(self):
self.x = 1
def get_fruit(self):
return FRUITS.APPLE
_class_name = foo """
def get_code_object():
return compile(module_as_string, "<string>", "exec")
def test():
exec(get_code_object())
a = eval("_class_name()")
print(a.get_fruit())
if __name__ == "__main__":
# below doesn't work
test()
# below works
exec(get_code_object())
a = eval("_class_name()")
print(a.get_fruit())
- 편집 : 나에게 당신이 요구하는 가치 아니라고 생각하면 내가이 질문을 개선 할 수있는 방법을 알려주세요. 투표 만하지 마라. 감사.
나는 downvote하지 않았지만 위의 "함수 테스트 (아래 참조)에서 **이 모듈을 호출하면 ** 작동하지 않습니다 **"(강조 중 한개)에 대해 구체적으로 설명해야합니다. 잘못되어가는. – Luigi
나는 다운 투표를하지는 않았지만 질문에 대한 한 가지 개선점은 왜 'importlib'을 사용하는 것에 비해 열등한 해결책이라고 인정하더라도 왜 이렇게하고 싶은지를 설명 할 수 있습니다. 또한 "작동하지 않는다"는 것은 매우 정확한 문제 진술이 아닙니다. – 5gon12eder