[Python] importlib.reload : module 재적재

2023. 6. 18. 20:10·Programming
728x90
728x90

기본적으로 Python의 module은 최초로 import될 때에만 수행이 됨.

  • 때문에 Python session에서 특정 module을 import 하고 난 이후
  • 해당 moduel에 수정사항이 발생할 경우,
  • 해당 수정사항은 수행 중인 session에 반영되지 못함.

Module에 대한 이해가 부족할 경우 다음 글을 참고할 것.

https://dsaint31.me/mkdocs_site/python/basic/module_package/

 

BME228

Modules and Packages Module 쉽게 생각하면 Python code 로 구성된 file을 가르킨다. Module은 import될 때 각각 고유의 namespace를 가짐 (Namespace의 역할도 수행). Python에서 module은 확장자가 .py인 파일을 가르킴 (py

dsaint31.me

 

이같은 수정사항을 반영하기 위해서는 명시적으로 특정 module을 다시 reload시켜야 하며

이를 위해서 Python은 importlib모듈의 reload function을 제공함.

  • 기존의 module의 namespace를 overwrite를 수행함 (inplace 변경임).
  • reload는 python으로 작성된 module에서만 가능함.
  • reload는 사용자가 만든 module에서만 가능함. Python이 자체 제공하는 module (e.g. math)에선 동작하지 않음.
  • reload는 module 하나씩만 적용 가능함.

다음 예제를 통해 importlib모듈의 reload사용법을 확인하자.

 

다음의 echo.py는 import되어 수행될 때와 main script로 동작할 때의 수행되는 code block이 다름.

#!/bin/env python

a = 'old'
# a = 'new'

if __name__ == '__main__':
    print(f'main script : {__name__}')
else:
    print(f'imported module : {__name__}')
    print(f'a = {a}')

 

다음은 이를 import하고, importlib모듈의 reload함수를 통해 echo 모듈을 다시 초기화 수행을 하는 echo_test.py파일임.

#!/bin/env python

import echo # import시 호출되는 code block 수행됨.
import echo # 아무 일 발생하지 않음. 이미 import된 터라.

input('edit echo.py and enter!') # echo.py의 a변수 주석을 수정하고 enter!

# # Python 3.0 ~ 3.4 이전
# import imp
# imp.reload(echo)

# Python 3.4 이후.
import importlib
importlib.reload(echo) # module variable을 반환함.

 

echo_test.py를 main script로 수행하면 echo모듈의 초기화에 의한 해당 메시지가 출력되고 사용자의 입력을 기다림.


이 상태에서 echo.py를 열고, a = 'new'부분의 주석을 해제하고 난 이후에 저장한 다음 echo_test.py의 terminal에서 엔터를 입력하면 해당 수정사항이 반영된 것을 확인 가능함.

 

https://docs.python.org/ko/3/library/importlib.html

 

importlib — The implementation of import

Source code: Lib/importlib/__init__.py Introduction: The purpose of the importlib package is three-fold. One is to provide the implementation of the import statement (and thus, by extension, the__i...

docs.python.org


같이 읽어보면 좋은 자료들

2023.06.18 - [Programming] - [Python] Module Search Path and sys.path

 

[Python] Module Search Path and sys.path

1. Module Search Path Python 에서 module을 찾는 경로 (Module Search Path)는 다음의 순서별로 우선권을 가짐. home directory of the program (main script file이 있는 위치 or python shell이 수행된 cwd) PYTHONPATH 환경변수 (envi

dsaint31.tistory.com

 

'Programming' 카테고리의 다른 글

[Python] Assignment (Basic)  (0) 2023.06.20
[Python] Module Search Path and sys.path  (0) 2023.06.18
[Python] Exception 처리  (0) 2023.06.16
[Python] Strong Typing이란? with Object  (1) 2023.06.13
[Python] Variable (and Object)  (0) 2023.06.13
'Programming' 카테고리의 다른 글
  • [Python] Assignment (Basic)
  • [Python] Module Search Path and sys.path
  • [Python] Exception 처리
  • [Python] Strong Typing이란? with Object
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (752)
      • Private Life (13)
      • Programming (56)
        • DIP (112)
        • ML (26)
      • Computer (119)
        • CE (53)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (355)
        • Signals and Systems (107)
        • Math (172)
        • Linear Algebra (33)
        • Physics (42)
        • 인성세미나 (1)
      • 정리필요. (54)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (1)
        • PET Study 2009 (1)
        • 방사선 장해방호 (4)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    linear algebra
    Vector
    opencv
    function
    Probability
    Convolution
    Term
    Python
    SS
    cv2
    signal_and_system
    fourier transform
    Programming
    numpy
    SIGNAL
    DIP
    signals_and_systems
    Optimization
    math
    인허가제도
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[Python] importlib.reload : module 재적재
상단으로

티스토리툴바