py_compile — 파이썬 소스 파일 컴파일

py_compile — 파이썬 소스 파일 컴파일

py_compile 모듈은 소스 파일에서 바이트코드 파일을 생성하는 함수와, 모듈 소스 파일이 스크립트로 호출될 때 사용되는 또 다른 함수를 제공해요.

출처: Python documentation

본문

이 함수가 자주 필요하지는 않지만, 특히 일부 사용자가 소스 코드를 담은 디렉터리에 바이트코드 캐시 파일을 쓸 권한이 없을 때 공용으로 쓰기 위해 모듈을 설치할 때 유용할 수 있어요.

  • 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.pycfile/foo/bar/__pycache__/baz.cpython-32.pyc 로 기본값이 정해져요.
    • dfile 이 지정되면 예외 traceback 에 표시할 소스 줄을 얻는 소스 파일 이름으로 file 대신 사용돼요.
    • doraise 가 참이면 컴파일 중 오류가 나면 PyCompileError 가 발생하고, 거짓(기본)이면 오류 문자열이 sys.stderr 에 쓰이고 예외는 발생하지 않아요.
    • 이 함수는 바이트컴파일된 파일의 경로, 즉 사용된 cfile 값을 반환해요.
    • doraisequiet 인자는 컴파일 중 오류를 어떻게 처리할지 결정해요. quiet 이 0 또는 1이고 doraise 가 거짓이면 기본 동작(오류 문자열을 sys.stderr 에 쓰고 경로 대신 None 반환)이 활성화돼요. doraise 가 참이면 PyCompileError 가 발생해요. 그러나 quiet 이 2면 메시지가 쓰이지 않고 doraise 는 효과가 없어요.
    • cfile 이 되는 경로(명시적으로 지정되거나 계산됨)가 심볼릭 링크이거나 일반 파일이 아니면 FileExistsError 가 발생해요. 이는 import 가 바이트컴파일 파일을 그 경로에 쓸 수 있으면 일반 파일로 바꿀 것이라는 경고 역할을 해요. 이는 import 가 최종 파일을 제자리에 두기 위해 파일 이름 변경(renaming)을 사용해 동시 쓰기 문제를 막는 부작용이에요.
    • optimize 는 최적화 수준을 제어하며 내장 compile() 함수에 전달돼요. 기본 -1 은 현재 인터프리터의 최적화 수준을 선택해요.
    • invalidation_modePycInvalidationMode enum 의 멤버여야 하며 생성된 바이트코드 캐시가 런타임에 어떻게 무효화되는지 제어해요. SOURCE_DATE_EPOCH 환경 변수가 설정돼 있으면 기본이 PycInvalidationMode.CHECKED_HASH 이고, 그 외에는 PycInvalidationMode.TIMESTAMP 가 기본이에요.

커맨드라인 사용법

py_compile 모듈은 커맨드라인 스크립트로도 실행할 수 있어요. python -m py_compile file.py ... 처럼 호출하면 각 소스 파일을 컴파일하고 .pyc 파일을 생성해요.

더 알아보기 (Learn more)