2014-09-20 2 views
1

후 모듈을 다시로드 :실행하여 나는 모듈을 다시로드 할 수 있다는 사실을 알고 변화

reload(module_name) 

내가 전체 모듈 만의 한 기능을 가져 오지 않는다는 것을 가정한다.

from module_name import one_function 

변경 한 특정 기능을 어떻게 다시로드 할 수 있습니까?

미리 감사드립니다.

+0

전체 모듈을 다시로드하지 않는 이유는 무엇입니까? 왜 하나의 함수 만 다시로드하고 싶습니까? – Nilesh

+1

그건 그렇고,'from module_name import one_function'을 사용하면'import module_name'처럼 ** 전체 모듈 **이로드됩니다. 유일한 차이점은 전역 이름 공간에 어떤 이름이 추가되는지입니다. – unutbu

+0

라파다, 이것은 NameError를 발생시킵니다. 모듈을 명시 적으로 가져 오지 않았습니다 (즉, 가져 오기 ). – bergercookie

답변

2

리 바인드하기 위해 하나의 이름을 다시 가져와야합니다. 당신은 sys.modules에 캐시 모듈 오브젝트에 도달 할 수 있습니다 :

reload(sys.modules['module_name']) 
from module_name import one_function 
1

당신은 기능을 소유하고있는 모듈 얻을 inspect.getmodule를 사용할 수 있습니다

import inspect 
from math import sqrt 
from importlib import reload 

math = reload(inspect.getmodule(sqrt)) 
sqrt = math.sqrt 

는이 프로세스를 자동화 할 수 있습니다 __qualname__ 사용을 :

def reload_attr(attribute): 
    obj = reload(inspect.getmodule(attribute)) 
    for name in attribute.__qualname__.split("."): 
     try: 
      obj = getattr(obj, name) 
     except NameError: 
      raise ValueError("Unable to find attribute.") 
    return obj 

reload_attr(sqrt) 
#>>> <built-in function sqrt> 

작동하는 것은 아닙니다. 모든 속성이 찾기가 쉽지는 않습니다.

관련 문제