파이썬으로 프로그램을 작성하다 보면 .py, .pyc, .pyo, .pyd 등 다양한 확장자를 가진 파일을 마주하게 됩니다. 각 확장자는 파이썬 프로그램의 실행 과정에서 저마다 고유한 역할을 담당하고 있습니다. 이번 글에서는 이 네 가지 확장자가 각각 어떤 의미를 지니는지 자세히 살펴보겠습니다.
.py — 파이썬 소스 코드 파일
.py는 개발자가 직접 작성한 파이썬 원본 소스 코드를 담고 있는 파일입니다. 우리가 흔히 작성하는 파이썬 스크립트가 바로 이 확장자를 사용하며, 사람이 읽고 편집할 수 있는 텍스트 형태로 되어 있습니다.
.pyc — 컴파일된 바이트코드 파일
.pyc는 파이썬 소스 코드가 컴파일된 바이트코드(bytecode)를 저장한 파일입니다. 모듈을 임포트(import)할 때 파이썬은 해당 모듈의 바이트코드를 담은 *.pyc 파일을 생성합니다. 이렇게 해두면 나중에 같은 모듈을 다시 임포트할 때 매번 소스를 새로 컴파일하지 않아도 되므로 임포트 속도가 크게 빨라집니다.
참고로 파이썬 3에서는 이러한 캐시 파일이 기본적으로 __pycache__라는 하위 디렉터리 안에 생성됩니다. 또한 .pyc 파일은 실행 속도 향상이 목적일 뿐, 프로그램 전체의 성능을 근본적으로 바꾸는 것은 아니라는 점도 알아두면 좋습니다.
.pyo — 최적화된 바이트코드 파일
.pyo는 최적화 옵션(-O)을 활성화한 상태에서 생성된 *.pyc 파일입니다. 일반적인 바이트코드와 동일하지만, 어서션(assert) 문 제거 등 일부 최적화가 적용되어 있다는 차이가 있습니다.
다만 주의할 점이 있습니다. 파이썬 3.5부터는 .pyo 확장자가 더 이상 사용되지 않습니다(deprecated). 대신 최적화 수준에 따라 .opt-1.pyc, .opt-2.pyc 같은 태그가 붙은 형태로 통합되었으므로, 최신 버전의 파이썬에서는 이 방식을 참고하시기 바랍니다.
.pyd — 윈도우용 파이썬 확장 모듈(DLL)
.pyd는 윈도우 환경에서 파이썬이 사용하는 DLL(동적 링크 라이브러리) 형태의 확장 모듈 파일입니다. C나 C++로 작성된 확장 모듈이 컴파일되면 윈도우에서는 .pyd 확장자를 갖게 되며, 파이썬이 이를 일반 모듈처럼 임포트하여 사용할 수 있습니다. 리눅스에서는 같은 역할을 하는 파일이 보통 .so(공유 오브젝트) 확장자를 사용한다는 점도 함께 기억해 두면 좋습니다.
정리: 한눈에 보는 파이썬 파일 확장자 비교
- .py : 개발자가 작성한 원본 소스 코드
- .pyc : 임포트 시 자동 생성되는 컴파일된 바이트코드(재임포트 속도 향상)
- .pyo : -O 최적화 옵션으로 생성된 바이트코드(파이썬 3.5부터 폐기)
- .pyd : 윈도우용 파이썬 확장 모듈(DLL과 동일한 구조)
이처럼 각 확장자는 파이썬 프로그램이 작성되고, 컴파일되고, 실행되는 과정에서 서로 다른 역할을 수행합니다. 파일의 용도를 정확히 이해해 두면 프로젝트 구조를 관리하거나 배포 시 발생할 수 있는 혼란을 줄이는 데 큰 도움이 됩니다.