Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python runpy 모듈 완벽 정리: 모듈 찾기 및 실행 방법

runpy 모듈이란?

파이썬 명령줄 옵션 중 -m 옵션은 지정된 모듈을 검색한 뒤 이를 __main__ 모듈로서 실행합니다. 이 메커니즘은 내부적으로 파이썬 표준 라이브러리의 runpy 모듈이 담당하며, 파일 시스템 경로가 아닌 파이썬 모듈 네임스페이스를 기준으로 스크립트를 찾아 실행할 수 있도록 해 줍니다.

runpy 모듈은 두 가지 핵심 함수를 제공합니다.

run_module()

이 함수는 지정된 모듈의 코드를 실행하고, 그 결과로 생성되는 모듈의 전역(globals) 딕셔너리를 반환합니다.

  • mod_name 인수에는 절대(absolute) 모듈 이름을 지정해야 합니다.
  • 모듈 이름이 일반 모듈이 아닌 패키지를 가리키는 경우, 해당 패키지가 먼저 임포트된 후 패키지 내부의 __main__ 서브모듈이 실행되며, 그 결과 전역 딕셔너리가 반환됩니다.

모듈 코드가 실행되기 전에 특수 전역 변수인 __name__, __spec__, __file__, __cached__, __loader__, __package__가 전역 딕셔너리에 설정됩니다.

  • __name__: 지정된 모듈이 패키지라면 mod_name + '.__main__'으로, 그렇지 않으면 mod_name으로 설정됩니다.
  • __file__, __cached__, __loader__, __package__: 모듈 스펙(module spec)에 따라 일반적인 방식으로 설정됩니다.

run_path()

이 함수는 주어진 경로에 있는 파일의 코드를 실행하고 결과 전역 딕셔너리를 반환합니다. 경로는 파이썬 소스 파일, 컴파일된 바이트코드 파일, 또는 __main__ 모듈을 포함하는 유효한 sys.path 항목(예: 최상위 __main__.py 파일을 담고 있는 zip 파일)을 가리킬 수 있습니다.

모듈 코드가 실행되기 전에 앞서 언급한 특수 전역 변수들이 전역 딕셔너리에 설정됩니다.

  • __name__: 선택적 인수 run_name이 None이 아니면 그 값으로, None이면 '<run_path>'로 설정됩니다.

예제

다음 스크립트를 runpyexample.py라는 이름으로 저장합니다.

#runpy 예제
def add(x,y):
    return x+y

def main():
    x,y = 10,20
    print(add(x,y))
    return

if __name__=='__main__':
    main()

일반적으로 위 예제를 실행하려면 모듈을 임포트한 후 main() 함수를 직접 호출해야 합니다.

>>> import runpyexample as rp
>>> rp.main()
30
>>>

그러나 runpy 모듈을 활용하면 임포트 과정 없이 곧바로 모듈을 실행할 수 있습니다.

>>> import runpy
>>> runpy.run_module('runpyexample', run_name='__main__')
30

run_path() 함수를 사용하는 방법도 있습니다.

>>> runpy.run_path('runpyexample.py', run_name='__main__')
30

앞서 설명했듯이 runpy 모듈은 파이썬 명령줄의 -m 스위치를 지원합니다.

E:\python37>python -m runpyexample
30

정리

runpy 모듈은 모듈을 파일 경로가 아닌 모듈 이름 기준으로 찾아 실행할 수 있게 해 주는 표준 라이브러리입니다. 실무에서는 python -m 모듈명 형태로 널리 사용되며, zipapp처럼 실행 가능한 아카이브를 만들거나 모듈을 동적으로 로드·실행해야 하는 도구를 개발할 때 특히 유용합니다.