Python 개발 모드
Python 개발 모드 (Python Development Mode)
Python 개발 모드는 기본적으로 활성화하기에는 비용이 너무 큰 추가 런타임 검사를 도입합니다. 코드가 정확하면 기본 모드보다 더 장황할 필요가 없습니다. 새 경고는 문제가 감지되었을 때만 발생합니다. -X dev 명령줄 옵션이나 PYTHONDEVMODE 환경 변수를 1로 설정하여 활성화할 수 있습니다 (3.7에서 추가).
본문
개발 모드의 효과
Python 개발 모드는 성능과 메모리에 대한 오버헤드 비용이 너무 크기 때문에 기본적으로 tracemalloc 모듈을 활성화하지 않습니다. tracemalloc 모듈을 활성화하면 일부 오류의 출처에 대한 추가 정보가 제공됩니다. 예를 들어 ResourceWarning이 해당 정보를 기록합니다.
개발 모드는 -O 명령줄 옵션이 assert 문을 제거하거나 __debug__를 False로 설정하는 것을 막지 않습니다. 개발 모드는 Python 시작 시에만 활성화할 수 있으며, 그 값은 sys.flags.dev_mode에서 읽을 수 있습니다.
버전 변경 사항:
- 3.8에서
io.IOBase소멸자가close()예외를 기록하게 됨. - 3.9에서
encoding과errors인자가 문자열 인코딩·디코딩 연산에 대해 검사되게 됨.
개발 모드는 ResourceWarning을 기본적으로 표시하여 해제되지 않은 파일, 소켓, 기타 자원을 개발 단계에서 조기에 발견하게 해 줍니다. 또한 기본 인코딩 관련 경고, 잘못된 인자 유형의 경고 등 기본 모드에서는 표시되지 않는 다양한 경고를 활성화합니다. 이 모드는 프로덕션보다는 개발 중에 문제를 조기에 잡기 위한 것으로, 코드 안전성 검사를 강화합니다.
예를 들어 잘못된 파일 디스크립터 오류 예시입니다:
Exception ignored in: <_io.TextIOWrapper name='script.py' mode='r' encoding='UTF-8'>
Traceback (most recent call last):
File "script.py", line 10, in <module>
main()
OSError: [Errno 9] Bad file descriptor
이처럼 개발 모드는 일반적으로 무시되던 예외와 자원 누수, 인코딩 오류 등을 눈에 띄게 만들어 개발자가 코드의 잠재적 문제를 발견하도록 돕습니다. 개발이 끝나면 프로덕션에서는 모드를 끄고 실행하는 것이 일반적입니다.