개요
일반적으로 python 코드는 python 명령으로 실행할 코드의 경로를 지정하여 실행한다.
python </path/source_code.py>
그런데 최근에 아래와 같은 명령어 사용을 확인하여,
python -m ipykernel install --user --name <ENV_NAME> --display-name "<KERNERL_NAME>"
python 명령의 -m 옵션이 어떤 역할을 하는지 적어두려고 한다.
python -m module-name
Python 공식 문서에서 명령줄과 환경 문서를 보면 python 명령어는 아래와 같은 옵션을 제공하고 있다.
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
그 중 -m 옵션은 제공한 module-name을 sys.path에서 검색하여 __main__ 모듈로 실행한다. 경로나 파일 이름이 아닌 모듈의 이름을 module-name로 지정하기 때문에 파일의 확장자는 포함되지 않는다.
( __main__, sys.path에 대해서는 2022.08.10-[Python] if __name__ == '__main__', 2022.07.23-[Python] import - 검색 순서에 간단히 적어두었었다.)
참고로 -m 옵션을 주어 실행하면 sys.argv의 첫번째 원소는 실행 코드의 경로가 되며, 이 부분은 -m 옵션 없이 스크립트 경로를 주어 실행했을 때와 동일하다.
테스트
python 코드를 실행 시 -m 옵션의 여부에 따라 동작이 달라지는지 비교해보기 위해 아래의 python 코드를 실행해본다.
import sys
if __name__ == '__main__':
print(__name__)
print(sys.argv)
- python 명령어
python test.py
- python -m 명령어
python -m test
실행하는 방법만 다를 뿐 실제 동작 결과에는 차이가 없는 것을 알 수 있다.
필요성
-m 옵션의 사용은 python 모듈이 배포되었을 때 효과적이다.
-m 옵션을 사용하지 않으면 python 모듈을 실행할 때마다 매번 실행한 코드의 경로를 기재해주어야하는데, -m 옵션을 사용하면 코드의 경로를 찾는 것을 sys.path가 대신해준다.
따라서 간편하게 모듈을 사용할 수 있다.
참고 문서
https://docs.python.org/ko/3/using/cmdline.html
https://jins-sw.tistory.com/22