콘텐츠로 건너뛰기

파이썬 모듈 재로딩하는 방법은?

[

모듈 다시 불러오기

Python 모듈과 패키지: 소개

  • import 문을 사용하여 모듈을 불러올 수 있음
  • 보통 모듈은 한 번만 로드됨
  • 모듈에는 함수와 클래스 정의뿐만 아니라 실행 가능한 문장들도 포함될 수 있음
  • 실행 가능한 문장은 보통 초기화를 위해 사용되며, 모듈이 임포트될 때 한 번만 실행됨
import mod
print(mod.a) # [100, 200, 300]
  • import mod를 여러 번 실행하면 실행 가능한 문장은 다시 실행되지 않음

모듈 다시 불러오기

  • 모듈을 변경한 후 다시 불러와야 할 경우가 있을 수도 있음
  • 이를 위해서는 인터프리터를 다시 시작하거나, importlib 모듈의 reload() 함수를 사용해야 함
import mod
import importlib
importlib.reload(mod)
  • reload() 함수는 변경된 모듈을 다시 불러오고, 변경 내용을 적용함
  • 위의 예시에서는 mod 모듈을 다시 불러옴

모듈 다시 불러오기의 유용성

  • 모듈 다시 불러오기는 주로 대화형 환경에서 유용
  • 모듈의 코드를 수정한 후, 수정 내용이 바로 반영되지 않는 문제를 해결하기 위해 사용됨
  • Jupyter Notebook과 같은 환경에서는 현재 상태가 명확하지 않을 수 있으므로, 모듈 다시 불러오기를 사용할 필요가 있음

importlib.reload와 reload 함수의 차이점

  • importlib.reload() 함수를 사용할 때 모듈 이름을 함께 입력해야 함
  • reload() 함수만 사용하면 오류가 발생함

다른 모듈들의 재로딩

  • importlib.reload() 함수를 사용하면 해당 모듈만 다시 불러옴
  • 다른 모듈들은 자동으로 재로딩되지 않음
  • 다른 모듈도 재로딩하려면, 해당 모듈을 직접 reload() 함수를 호출하여 재로딩해야 함

모듈의 의존성 관리

  • 모듈이 다른 모듈을 임포트하는 경우, 의존성 관리에 주의가 필요함
  • 모듈을 한 번만 재로딩하더라도, 해당 모듈이 임포트한 모듈들은 자동으로 재로딩되지 않음
  • 모듈의 의존성을 갖는 모든 모듈을 재로딩하려면, 각각의 모듈을 직접 재로딩해야 함

모듈 재로딩에 대한 심층적인 이해

  • 모듈의 재로딩은 모듈이 참조하는 객체들 간의 레퍼런스를 어떻게 관리하는지에 대한 깊은 이해를 요구함
  • 의도하지 않은 동작이 발생할 수 있으므로, 모듈 재로딩할 때 의존성 관리에 유의해야 함

모듈 재로딩: 실제 코드 예제

mod.py
s = "컴퓨터는 쓸모없습니다. 오로지 답만 제시할 뿐입니다."
a = [100, 200, 300]
def printy(arg):
print(f'arg = {arg}')
class Classy:
pass
print(f'a = {a}')
main.py
import mod
import importlib
print(mod.a) # [100, 200, 300]
importlib.reload(mod)
print(mod.a) # [100, 200, 300]
  • main.py 파일에서 mod 모듈을 임포트하고, reload() 함수를 사용하여 다시 불러옴
  • 변경된 모듈은 다시 임포트되어 변경 내용이 반영됨

결론

  • 모듈을 수정한 후 다시 불러와야 하는 경우, 인터프리터를 재시작하는 것 대신 importlib.reload() 함수를 사용할 수 있음
  • 의존하는 다른 모듈들도 함께 재로딩해야 하는 경우가 있으므로, 주의가 필요함
  • 모듈 재로딩은 대화형 환경과 Jupyter Notebook에서 특히 유용함