기본적으로 Python의 module은 최초로 import될 때에만 수행이 됨.
- 때문에 Python session에서 특정 module을 import 하고 난 이후
- 해당 moduel에 수정사항이 발생할 경우,
- 해당 수정사항은 수행 중인 session에 반영되지 못함.
Module에 대한 이해가 부족할 경우 다음 글을 참고할 것.
https://dsaint31.me/mkdocs_site/python/basic/module_package/
이같은 수정사항을 반영하기 위해서는 명시적으로 특정 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
같이 읽어보면 좋은 자료들
2023.06.18 - [Programming] - [Python] Module Search Path and sys.path
'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 |