대화형 모듈 재 Import
모듈을 재 Import하려면 어떻게 해야 하나요?.py 파일을 변경한 후 모듈을 다시 가져오고 싶습니다.
Python 3.4+의 경우:
import importlib
importlib.reload(nameOfModule)
Python < 3.4의 경우:
reload(my.module)
이전에 Import한 모듈을 새로고침합니다.인수는 모듈개체여야 하므로 이전에 정상적으로 Import된 적이 있어야 합니다.외부 에디터를 사용하여 모듈소스 파일을 편집하여 Python 인터프리터를 떠나지 않고 새로운 버전을 시험해 보고 싶을 때 유용합니다.
이 방법을 사용할 때의 주의사항을 잊지 마십시오.
모듈을 새로고침하면 모듈의 글로벌 변수를 포함하는 사전이 유지됩니다.이름을 재정의하면 오래된 정의가 덮어쓰기 때문에 일반적으로 이것은 문제가 되지 않지만 새 버전의 모듈이 이전 버전에서 정의한 이름을 정의하지 않으면 오래된 정의는 삭제되지 않습니다.
모듈이 다른 모듈에서 개체를 Import하는 경우
from ... import ...
,부르기reload()
다른 모듈에서는 Import된 오브젝트를 재정의하지 않습니다.이 문제를 회피하기 위한 한 가지 방법은,from
스테이트먼트, 또 다른 방법은import
및 정규화된 이름(module.*name*
)을 클릭합니다.모듈이 클래스의 인스턴스를 인스턴스화한 경우 클래스를 정의하는 모듈을 새로고침해도 인스턴스의 메서드 정의에 영향을 주지 않습니다.클래스 정의는 계속 사용됩니다.파생 클래스도 마찬가지입니다.
python 3에서는reload
더 이상 내장 기능이 아닙니다.
python 3.4+ 를 사용하고 있는 경우는, 대신에 라이브러리에서 다음의 것을 사용해 주세요.
import importlib
importlib.reload(some_module)
python 3.2 또는 3.3을 사용하는 경우 다음을 수행해야 합니다.
import imp
imp.reload(module)
대신.http://docs.python.org/3.0/library/imp.html#imp.reload 를 참조해 주세요.
를 사용하고 있는 경우는, 다음의 내선 번호의 사용을 검토해 주세요.
%load_ext autoreload
%autoreload 2
사실 Python 3에서 모듈은imp
는 DEFECUREED로 마크되어 있습니다.음, 적어도 3.4는 해당됩니다.
그 대신reload
에서 기능하다importlib
모듈을 사용해야 합니다.
https://docs.python.org/3/library/importlib.html#importlib.reload
그러나 이 라이브러리는 마지막 두 개의 마이너 버전에서 API가 일부 변경되었음을 유의하십시오.
모듈에서 특정 함수 또는 클래스를 Import하는 경우 다음을 수행할 수 있습니다.
import importlib
import sys
importlib.reload(sys.modules['my_module'])
from my_module import my_function
또 다른 작은 점:를 사용했을 경우import some_module as sm
에일리어스 이름을 사용하여 모듈을 새로고침해야 합니다(sm
이 예에서는, 다음과 같이 됩니다.
>>> import some_module as sm
...
>>> import importlib
>>> importlib.reload(some_module) # raises "NameError: name 'some_module' is not defined"
>>> importlib.reload(sm) # works
제공된 답변은 특정 모듈에서 동작하지만 이 답변에서 설명한 바와 같이 서브모듈은 새로고침되지 않습니다.
이 "Import"를 사용하여 에서 개체를 Import하는
from ... import ...
, 호출, 호출reload()
문을 하거나 Import를 사용하는 .이러한 방법으로 from 스테이트먼트를 재작성하고 다른 모듈을 사용하여import
수식명)module.*name*
을 클릭합니다을 클릭합니다.
, 를 는, 「 」__all__
API를 정의할 수 .public variable은 합니다.
# Python >= 3.5
import importlib
import types
def walk_reload(module: types.ModuleType) -> None:
if hasattr(module, "__all__"):
for submodule_name in module.__all__:
walk_reload(getattr(module, submodule_name))
importlib.reload(module)
walk_reload(my_module)
그러나 이전 답변에서 언급된 경고는 여전히 유효합니다.특히의 에 따라 .__all__
변수는 이 함수를 사용한 새로고침의 영향을 받지 않습니다.마찬가지로 서브모듈의 요소를 삭제해도 새로고침에는 반영되지 않습니다.
import sys
del sys.modules['module_name']
import module_name
언급URL : https://stackoverflow.com/questions/1254370/reimport-a-module-while-interactive
'source' 카테고리의 다른 글
vue 모드에서 요소 값을 표시하는 방법 (0) | 2022.11.05 |
---|---|
문자열이 직렬화되었는지 확인하시겠습니까? (0) | 2022.11.05 |
Java Desktop 애플리케이션: SWT vs. Swing (0) | 2022.11.05 |
MyISAM과 InnoDB의 차이점은 무엇입니까? (0) | 2022.11.05 |
SQL 쿼리가 잘못된 결과를 제공함 (0) | 2022.11.05 |