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

소스 코드: Lib/py_compile.py


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

자주 사용되지는 않지만, 특히 일부 사용자가 소스 코드가 들어있는 디렉터리에 바이트 코드 캐시 파일을 쓸 수 있는 권한이 없을 때, 이 함수는 공유 사용을 위해 모듈을 설치할 때 유용할 수 있습니다.

exception py_compile.PyCompileError

파일을 컴파일하는 도중 에러가 일어날 때 발생하는 예외.

py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP)

바이트 코드로 소스 파일을 컴파일하고 바이트 코드 캐시 파일을 기록합니다. 소스 코드는 file이 지정하는 이름의 파일에서 로드됩니다. 바이트 코드는 cfile에 기록되며, 기본값은 .pyc로 끝나는 PEP 3147/PEP 488 경로입니다. 예를 들어, file/foo/bar/baz.py이면 cfile은 파이썬 3.2의 경우 /foo/bar/__pycache__/baz.cpython-32.pyc로 기본 설정됩니다. dfile이 지정되면, file 대신 에러 메시지에서 소스 파일 이름으로 사용됩니다. doraise가 참이면, file을 컴파일하는 동안 에러를 만나면 PyCompileError가 발생합니다. doraise가 거짓(기본값)이면, sys.stderr에 에러 문자열이 기록되지만, 예외는 발생하지 않습니다. 이 함수는 바이트 컴파일된 파일의 경로, 즉 사용된 cfile 값을 반환합니다.

cfile이 되는 경로(명시적으로 지정되거나 계산된 경로)가 심볼릭 링크나 비정규 파일이면, FileExistsError가 발생합니다. 이것은 바이트 컴파일된 파일을 해당 경로에 쓸 수 있을 때 임포트가 해당 경로를 일반 파일로 바꾼다는 경고로 작용합니다. 이는 동시 파일 기록 문제를 방지하기 위해 최종 바이트 컴파일된 파일을 위치시키는데 파일 이름 바꾸기를 사용하는 임포트의 부작용입니다.

optimize는 최적화 수준을 제어하고 내장 compile() 함수로 전달됩니다. 기본값 -1은 현재 인터프리터의 최적화 수준을 선택합니다.

invalidation_modePycInvalidationMode enum의 멤버여야 하며 실행 시간에 생성된 바이트 코드 캐시를 무효로 하는 방법을 제어합니다. SOURCE_DATE_EPOCH 환경 변수가 설정되면 기본값은 PycInvalidationMode.CHECKED_HASH이고, 그렇지 않으면 기본값은 PycInvalidationMode.TIMESTAMP입니다.

버전 3.2에서 변경: cfile의 기본값을 PEP 3147과 호환되도록 변경했습니다. 이전 기본값은 file + 'c'(최적화가 활성화되었으면 'o')입니다. 또한 optimize 매개 변수가 추가되었습니다.

버전 3.4에서 변경: 바이트 코드 캐시 파일 쓰기에 importlib를 사용하도록 코드를 변경했습니다. 이것은 파일 생성/기록 의미가 이제 importlib가 하는 것과 일치한다는 것을 의미합니다, 예를 들어 권한, 쓰기-와-이동 의미 등. 또한, cfile이 심볼릭 링크나 비정규 파일이면 FileExistsError가 발생시키는 경고를 추가했습니다.

버전 3.7에서 변경: invalidation_mode 매개 변수가 PEP 552에 지정된 대로 추가되었습니다. SOURCE_DATE_EPOCH 환경 변수가 설정되면, invalidation_modePycInvalidationMode.CHECKED_HASH로 강제 설정됩니다.

버전 3.7.2에서 변경: SOURCE_DATE_EPOCH 환경 변수는 더는 invalidation_mode 인자의 값을 재정의하지 않으며, 대신 기본값을 결정합니다.

class py_compile.PycInvalidationMode

인터프리터가 바이트 코드 파일이 소스 파일에 대해 최신 버전인지를 결정하는 데 사용할 수 있는 가능한 방법의 열거형입니다. .pyc 파일은 헤더에서 원하는 무효화 모드를 가리킵니다. 파이썬이 실행 시간에 .pyc 파일을 무효로 하는 방법에 대한 자세한 내용은 캐시된 바이트 코드 무효화를 참조하십시오.

버전 3.7에 추가.

TIMESTAMP

.pyc 파일은 파이썬이 실행 시간에 소스 파일의 메타 데이터와 비교하여 .pyc 파일을 재생성해야 하는지를 결정할 소스 파일의 타임스탬프와 크기를 포함합니다.

CHECKED_HASH

.pyc 파일은 파이썬이 실행 시간에 소스와 비교하여 .pyc 파일을 다시 생성해야 하는지를 결정할 소스 파일 내용의 해시를 포함합니다.

UNCHECKED_HASH

CHECKED_HASH와 마찬가지로, .pyc 파일에는 소스 파일 내용의 해시가 포함됩니다. 하지만, 파이썬은 실행 시간에 .pyc 파일이 최신 버전이라고 가정하고, 소스 파일에 대해 .pyc를 전혀 검증하지 않습니다.

이 옵션은 .pycs가 빌드 시스템처럼 파이썬 외부 시스템에 의해 최신 상태로 유지될 때 유용합니다.

py_compile.main(args=None)

여러 소스 파일을 컴파일합니다. args(또는 argsNone이면 명령 줄)로 이름 붙여진 파일이 컴파일되고 결과 바이트 코드가 일반적인 방식으로 캐시 됩니다. 이 함수는 소스 파일을 찾기 위해 디렉터리 구조를 검색하지 않습니다; 명시적으로 이름이 지정된 파일 만 컴파일합니다. '-'가 args의 유일한 매개 변수면, 파일 목록을 표준 입력에서 가져옵니다.

버전 3.2에서 변경: '-'에 대한 지원이 추가되었습니다.

이 모듈을 스크립트로 실행하면, main()이 명령 줄로 이름이 지정된 모든 파일을 컴파일하는 데 사용됩니다. 파일 중 하나를 컴파일할 수 없으면 종료 상태는 0이 아닙니다.

더 보기

모듈 compileall

디렉터리 트리에 있는 모든 파이썬 소스 파일을 컴파일하는 유틸리티.