본문 바로가기
Python/Python FAQ

IPython에서 하위 모듈 다시 로드하기, Reloading submodules in IPython

by 베타코드 2023. 10. 8.
반응형

질문


현재 나는 numpy/scipy를 사용하는 하위 모듈을 포함하는 파이썬 프로젝트에 참여하고 있습니다. 대화형 콘솔로 Ipython을 사용하고 있습니다. 아쉽게도 현재 사용 중인 작업 흐름에는 크게 만족하지 못하고 있으며, 조언을 받을 수 있다면 감사하겠습니다.

IPython에서는 간단한 import 명령으로 프레임워크를 로드합니다. 그러나 종종 프레임워크의 하위 모듈 중 하나의 코드를 변경해야 할 필요가 있습니다. 이 시점에서 이미 모델이 로드되었고, IPython을 사용하여 상호 작용합니다.

이제 프레임워크에는 서로 의존하는 많은 모듈이 포함되어 있습니다. 즉, 프레임워크가 초기에 로드될 때 주 모듈이 하위 모듈을 가져오고 구성합니다. 코드 변경 사항은 전체 경로를 사용하여 개별적으로 모듈을 다시 로드해야 하는 번거로움이 있습니다. reload(main_mod.sub_mod)를 사용하여 모듈을 다시 로드해야 합니다. 만약 reload(main_module)이 주 모듈뿐만 아니라 모든 하위 모듈도 다시 로드되지만 numpy/scipy는 다시 로드되지 않는다면 매우 편리할 것입니다.


답변


IPython은 일부 자동 재로딩 매직을 함께 제공합니다:

%load_ext autoreload
%autoreload 2

이는 새로운 줄을 실행하기 전에 변경된 모든 모듈을 다시 로드합니다. 이 작업은 dreload와 약간 다릅니다. 일부 주의사항이 적용되며, 무엇이 잘못될 수 있는지 확인하려면 %autoreload?를 입력하세요.


이 설정을 항상 활성화하려면 IPython 설정 파일인 ~/.ipython/profile_default/ipython_config.py[1]를 수정하여 다음을 추가하세요:

c.InteractiveShellApp.extensions = ['autoreload']     
c.InteractiveShellApp.exec_lines = ['%autoreload 2']

@Kos에게 크레딧을 드립니다.

[1] ~/.ipython/profile_default/ipython_config.py 파일이 없는 경우에는 먼저 ipython profile create을 호출해야 합니다. 또는 파일은 $IPYTHONDIR에 위치할 수도 있습니다.

반응형

댓글