Python 모듈을 컴파일된 형식으로 유지할 수 있을까요?
네, 가능합니다. Python은 모듈을 임포트(import)할 때 소스 코드를 자동으로 컴파일하기 때문에, PYC 파일을 만드는 가장 간단한 방법은 해당 모듈을 임포트하는 것입니다.
예를 들어 mymodule.py라는 모듈이 있다면 다음과 같이 실행하면 됩니다.
>>> import mymodule
이렇게 하면 같은 디렉터리에 mymodule.pyc 파일이 생성됩니다.
주의할 점: 임포트 시 코드가 실행됩니다
다만 이 방법에는 한 가지 단점이 있습니다. 단순히 컴파일만 하는 것이 아니라 모듈 전체가 실행된다는 점입니다. 원하지 않는 부작용이 발생할 수 있죠. (물론 실행 중 오류가 발생하더라도 스크립트 전체는 컴파일됩니다.)
실행 없이 컴파일하기: py_compile 모듈
코드를 실행하지 않고 프로그래밍 방식으로 컴파일하고 싶다면 py_compile 모듈을 사용하세요.
>>> import py_compile
>>> py_compile.compile("mymodule.py")
이 방법은 소스 코드를 실행하지 않고 바이트코드 파일만 생성하므로, 부작용 없이 안전하게 컴파일할 수 있습니다.
디렉터리 전체 컴파일하기: compileall 모듈
여러 모듈을 한 번에 처리해야 한다면 compileall 모듈이 유용합니다. 이 모듈을 사용하면 디렉터리 트리 전체에 있는 모든 모듈을 일괄 컴파일할 수 있습니다.
>>> import compileall
>>> compileall.compile_dir("mylib", force=1)
force=1 옵션을 지정하면 기존 PYC 파일의 타임스탬프와 관계없이 강제로 다시 컴파일합니다.
바이트코드 호환성 참고 사항
Python의 바이트코드는 운영체제나 하드웨어 플랫폼 간에는 이식 가능(portable)하지만, Python 릴리스(버전) 간에는 반드시 호환되지 않는다는 점에 유의하세요. 예를 들어 Python 3.8에서 생성한 PYC 파일은 Python 3.9에서 제대로 작동하지 않을 수 있습니다. 따라서 배포 환경의 Python 버전에 맞춰 컴파일하는 것이 좋습니다.