python3 -O

전찬욱·2025년 12월 14일

단, 한 가지 주의할 점:

python -O(옵티마이즈 모드)로 실행하면 assert가 제거됩니다.
정말 “GPU를 반드시 강제해야 한다”는 보장을 항상 유지하고 싶다면, 원래처럼 if not avail: raise RuntimeError(...)를 쓰는 게 더 안전합니다.


파이썬의 Optimize 모드(-O, -OO)는 CPython 실행 시 “디버깅/검증용 오버헤드”를 줄이기 위해 일부 코드 요소를 제거/변경하는 옵션이에요. 핵심은 아래 2가지입니다.

-O / -OO에서 바뀌는 것

1) assert가 완전히 제거됨 (가장 중요)

  • python -O로 실행하면 assert 조건, 메시지 문이 아예 컴파일 단계에서 삭제됩니다.
  • 그래서 assert torch.cuda.is_available() 같은 “필수 조건 강제”는 -O에서 무력화돼요.

2) __debug__ 값이 False가 됨

  • 기본 실행에서는 __debug__ == True

  • -O(또는 -OO)에서는 __debug__ == False

  • 따라서 아래 같은 패턴도 실행되지 않습니다.

    if __debug__:
        ...  # 디버그 전용 검증/로그

3) -OO는 추가로 docstring 제거

  • -OO-O의 효과 + 모든 docstring(__doc__) 제거
  • 일부 라이브러리/툴이 docstring을 참고하는 경우(드물지만) 문제를 만들 수 있어요.

참고로, “성능 최적화(루프가 빨라진다)” 같은 건 기대하면 안 됩니다. -O는 주로 assert/디버그용 코드 제거가 전부에 가깝습니다.

0개의 댓글