py_compile — 파이썬 소스 파일 컴파일
py_compile — 파이썬 소스 파일 컴파일
py_compile 모듈은 소스 파일에서 바이트코드 파일을 생성하는 함수와, 모듈 소스 파일이 스크립트로 호출될 때 사용되는 또 다른 함수를 제공해요.
본문
이 함수가 자주 필요하지는 않지만, 특히 일부 사용자가 소스 코드를 담은 디렉터리에 바이트코드 캐시 파일을 쓸 권한이 없을 때 공용으로 쓰기 위해 모듈을 설치할 때 유용할 수 있어요.
-
exception py_compile.PyCompileError — 파일 컴파일 시도 중 오류가 발생했을 때 발생하는 예외예요.
-
py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0) — 소스 파일을 바이트코드로 컴파일하고 바이트코드 캐시 파일을 써요.
- 소스 코드는 file 이라는 파일에서 로드돼요. 바이트코드는 cfile 에 쓰이고, 기본은 PEP 3147/PEP 488 경로로
.pyc로 끝나요. 예를 들어 file 이/foo/bar/baz.py면 cfile 은/foo/bar/__pycache__/baz.cpython-32.pyc로 기본값이 정해져요. - dfile 이 지정되면 예외 traceback 에 표시할 소스 줄을 얻는 소스 파일 이름으로 file 대신 사용돼요.
- doraise 가 참이면 컴파일 중 오류가 나면
PyCompileError가 발생하고, 거짓(기본)이면 오류 문자열이sys.stderr에 쓰이고 예외는 발생하지 않아요. - 이 함수는 바이트컴파일된 파일의 경로, 즉 사용된 cfile 값을 반환해요.
- doraise 와 quiet 인자는 컴파일 중 오류를 어떻게 처리할지 결정해요. quiet 이 0 또는 1이고 doraise 가 거짓이면 기본 동작(오류 문자열을
sys.stderr에 쓰고 경로 대신None반환)이 활성화돼요. doraise 가 참이면PyCompileError가 발생해요. 그러나 quiet 이 2면 메시지가 쓰이지 않고 doraise 는 효과가 없어요. - cfile 이 되는 경로(명시적으로 지정되거나 계산됨)가 심볼릭 링크이거나 일반 파일이 아니면
FileExistsError가 발생해요. 이는 import 가 바이트컴파일 파일을 그 경로에 쓸 수 있으면 일반 파일로 바꿀 것이라는 경고 역할을 해요. 이는 import 가 최종 파일을 제자리에 두기 위해 파일 이름 변경(renaming)을 사용해 동시 쓰기 문제를 막는 부작용이에요. - optimize 는 최적화 수준을 제어하며 내장
compile()함수에 전달돼요. 기본-1은 현재 인터프리터의 최적화 수준을 선택해요. - invalidation_mode 는
PycInvalidationModeenum 의 멤버여야 하며 생성된 바이트코드 캐시가 런타임에 어떻게 무효화되는지 제어해요.SOURCE_DATE_EPOCH환경 변수가 설정돼 있으면 기본이PycInvalidationMode.CHECKED_HASH이고, 그 외에는PycInvalidationMode.TIMESTAMP가 기본이에요.
- 소스 코드는 file 이라는 파일에서 로드돼요. 바이트코드는 cfile 에 쓰이고, 기본은 PEP 3147/PEP 488 경로로
커맨드라인 사용법
py_compile 모듈은 커맨드라인 스크립트로도 실행할 수 있어요. python -m py_compile file.py ... 처럼 호출하면 각 소스 파일을 컴파일하고 .pyc 파일을 생성해요.