파이썬 if __name__ ==__main

jongeun·2023년 5월 28일
0
post-custom-banner
  • fastapi에서 디버깅하기 위해 main.py에 아래와 같은 코드를 작성한다.
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8001,reload=True)
  • 위 코드를 작성하는 이유는 디버깅 할 때 각 파일(모듈)실행 시, 서버가 켜지지 않기 위함이다.
    • 위 코드를 넣는다면 다른 파일에서 main.py를 임포트했을 때, 다른 파일을 실행 시 서버가 켜지지 않도록 할 수 있다.
    • 왜냐하면 파이썬에서는 기본적으로 현재 실행하는 파일이 __name____main__이지만 해당 모듈을 임포트했을 때는 __name__ 이 파일명이 된다.
  • 그렇지만 vscode의 launch.json에 아래 부분을 추가해주면 디버거가 uvicorn서버를 직접 시작하므로 If문 설정은 필요 없음
"module": "uvicorn",
            "args": [
                "main:app",
                "--host",
                "0.0.0.0",
                "--reload",
                "--port",
                "8001"
            ],

  • 실제로 uvicorn main:app --reload와 같은 명령어를 터미널에서 직접 입력해서 FastAPI 애플리케이션을 실행하는 것이 일반적임
  • if문을 사용하면 즉, python main.py라고 입력하면 서버가 시작
    • if name == "main": 코드 블록을 사용하면, 스크립트가 임포트되었을 때 서버가 시작되는 것을 방지할 수 있음

  • if코드 블록 안의 코드는 스크립트가 직접 실행될 때만 실행됨(ex.python main.py)
    • 이것은 uvicorn 서버를 시작하는 코드를 포함하여 모듈이 임포트 될 때 실행되지 않도록 하기 위함
  • if코드를 스크립트에 포함시키면 vscode 디버거 없이도 스크립트를 각각 직접 실행하여 유비콘 서버를 시작할 수 있음

  • 스크립트가 임포트 되었을 때, 일반적으로는 스크립트 전체가 실행되지 않기를 원함
    • 이 스크립트는 라이브러리 혹은 모듈처럼 동작하며, 특정 기능만 필요로 하기 때문
    • 이런 경우에 if name == "main":은 아주 유용
  • 이 조건문을 스크립트에 포함시키면, 디버거 없이도 스크립트를 직접 실행하여 uvicorn서버를 시작할 수 있음
    • 디버거를 사용하지 않고 터미널에서 python main.py와 같은 명령을 내려도 fastapi앱이 동작하게됨
    • 디버거를 사용하지 않고 디버깅을 할 때 아래 코드를 넣는 이유가 각각의 스크립트를 직접 실행하면서 디버깅 하기 위함
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8001,reload=True)
  1. 위 코드를 main.py에 적고 각각의 스크립트를 직접 실행 시키면서 디버깅하는 것과
    2.vicorn main:app --reload 명령어를 직접 실행시키면서 각각의 스크립트를 직접 실행시키는 것이 똑같다.
    (이 부분이 다른 것 같아서 매우 헷갈렸다..그렇지만 똑같다.)
profile
기록으로 성장하는 개발자 되기
post-custom-banner

0개의 댓글