파이썬은 인터프리터 기반 언어입니다. 그러나 스크립트(.py 확장자)가 실행될 때 내부적으로 소스 코드를 바이트 코드로 컴파일하고 그 후에 바이트 코드 버전은 자동으로 제거됩니다. 모듈(미리 컴파일된 내장 모듈 제외)을 처음 가져올 때 컴파일된 버전도 자동으로 빌드되지만 __pycache__ 폴더에 .pyc 확장자로 저장됩니다. 동일한 모듈을 다시 가져오기 위한 후속 호출은 모듈을 다시 컴파일하지 않고 이미 빌드된 모듈을 사용합니다.
그러나 확장자가 .py인 Python 스크립트 파일은 실행하지 않고 명시적으로 컴파일할 수 있습니다. 'py_compile' 모듈에 'compile()'이 포함되어 있습니다. 그 목적을 위한 기능. 결과 .pyc 파일의 이름은 Python 버전 번호로 추가됩니다. Python 3.7의 경우 이름에 'cpython-37' 접미사가 붙습니다.
이 모듈은 일반적으로 필요하지 않습니다. 그러나 특히 일부 사용자가 소스 코드가 포함된 디렉토리에 바이트 코드 캐시 파일을 쓸 수 있는 권한이 없는 경우 공유 사용을 위해 모듈을 설치할 때 유용할 수 있습니다.
모듈에는 명령줄 인터페이스가 있습니다. 다음과 같이 –m 스위치를 사용하여 가져올 수 있습니다.
E:\python37>python -m py_compile hello.py
이렇게 하면 __pycache__ 하위 폴더에 'hello.cpython-37.pyc' 파일이 생성되어 저장됩니다.
바이트 컴파일은 py_compile 모듈의 compile() 함수를 사용하여 프로그래밍 방식으로 수행할 수도 있습니다.
import py_compile py_compile.compile("hello.py")
확장자가 .pyc인 바이트코드 파일은 확장자가 .py인 일반 스크립트와 마찬가지로 명령줄에서 직접 실행할 수 있습니다.
E:\python37>python __pycache__/hello.cpython-37.pyc
단, 바이트코드 파일이 컴파일된 것과 동일한 버전의 인터프리터로 실행할 수 있습니다. 다른 버전의 Python으로 실행하려고 하면 다음 오류가 표시됩니다.
C:\python36>python e:hello.cpython-37.pyc RuntimeError: Bad magic number in .pyc file
py_compile 모듈에는 여러 소스 파일을 컴파일하는 또 다른 함수 main()이 있습니다. 인수로 명명된 파일이 컴파일되고 결과 바이트 코드가 일반적인 방식으로 캐시됩니다. 이 함수는 소스 파일을 찾기 위해 디렉토리 구조를 검색하지 않습니다. 명시적으로 명명된 파일만 컴파일합니다.
이 모듈은 또한 파일 컴파일을 시도하는 동안 오류가 발생할 때 발생하는 PyCompileError 예외를 정의합니다. (이는 compile() 함수에 대해 doraise 옵션이 True로 설정된 경우에만 발생합니다.
compile() 함수의 최적화 옵션은 최적화 수준을 제어하고 내장 compile() 함수에 전달됩니다. 기본값 -1은 현재 인터프리터의 최적화 수준을 선택합니다.