[파이썬] Python __name__ == ‘__main__’의 왜 사용할까?
파이썬 언어 개발시 IDE툴 중에서 파이참(PyCharm) 툴을 사용하여 프로젝트 생성시 아래와 같은 main.py 샘플 스크립트를 함께 생성할 수 있습니다. 아래 코드 스니펫을 보면 if절 조건문에 __name__ == ‘__main__’ 와 같은 조건이 있습니다.
# This is a sample Python script. # Press Shift+F10 to execute it or replace it with your code. # Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. def print_hi(name): # Use a breakpoint in the code line below to debug your script. print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint. # Press the green button in the gutter to run the script. if __name__ == '__main__': print_hi('PyCharm') # See PyCharm help at https://www.jetbrains.com/help/pycharm/
파이썬 __name__ 변수는 모듈의 이름을 출력합니다.
즉 실행되는 모듈의 이름이 저장되는 변수이며import로 모듈을 가져왔을 때 모듈의 이름이 들어갑니다.
파이썬 인터프리터(interpreter)로 스크립트 파일을 직접 실행했을 때는 모듈의 이름이 아니라 ‘__main__’이 들어갑니다.
이해를 돕기 위해 아래 코드를 참고해볼까요?
custompackage패키지를 하나 만들었습니다. 그리고 이 패키지 안에 calclulator.py 모듈과 autoprint.py모듈을 추가하였습니다. 그리고 main.py 모듈에서 custompackage패키지에 추가된 모듈 2개를 import 한 후 실행해보았습니다.
#calclulator.py
def calplus(a, b): return a + b def calminus(a, b): return a - b if __name__ == '__main__': print("calculator.py 직접 실행됨 : __name__ ->", __name__) else: print("calculator.py import로 호출됨 : __name__ ->", __name__)
#autoprint.py
def print_name(): print("autoprint.print_name(): __name__ ->", __name__)
#main.py
import custompackage.autoprint import custompackage.calculator def print_hi(name): print(f'Hi, {name}') if __name__ == '__main__': print("main.py 직접 실행됨 : __name__ ->", __name__) else: print("main.py import로 호출됨 : __name__ ->", __name__) a = 10 b = 20 custompackage.calculator.calplus(a, b) custompackage.autoprint.print_name()
[main.py 실행결과]
C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py calculator.py import로 호출됨 : __name__ -> custompackage.calculator main.py 직접 실행됨 : __name__ -> __main__ calclulator.calplus: __name__ -> custompackage.calculator autoprint.print_name(): __name__ -> custompackage.autoprint
감이 오시나요??
calculator.py를 import가 아닌 직접 실행을 해보겠습니다.
C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/custompackage/calculator.py calculator.py 직접 실행됨 : __name__ -> __main__
이제 확실히 이해가 되시죠??
파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없습니다.
어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있습니다.
그래서__name__변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단합니다.
파이썬 __name__ == ‘__main__’ 사용하는 이유
if __name__ == ‘__main__’와 같은 조건을 사용하는 이유는 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도입니다.