Python

[Python] python -m 옵션

비번변경 2024. 6. 25. 18:56

개요

일반적으로 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