Python 소스 코드 compile과 Python interpreter compile를 알아보자.

 

 

 

 

목적 : 개발 서버에 파이썬으로 개발한 백엔드 코드를 배포

 

아래는 Dockerfile의 일부이다.

# Python 3.8 설치
RUN curl -O https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz \
    && tar xzf Python-3.8.12.tgz \
    && cd Python-3.8.12 \
    && ./configure --enable-optimizations \
    && make altinstall

 

각 명령어의 의미는 다음과 같다.

  • ./configure --enable-optimizations
    • Python을 컴파일하기 위한 설정을 수행
    • --enable-oprimizations 플래그는 Python 실행 속도를 향상시키는 최적화 옵션을 활성화
  • make altinstall
    • 설정된 옵션으로 Python을 컴파일하고 시스템에 설치
    • 기존의 Python 인터프리터와 충돌하지 않도록 새로운 버전의 Python을 설치

 


 

 

파이썬 코드는 인터프리터를 통해 실행되는 인터프리터 언어이다.

하지만 앞서 "Python을 컴파일"이라는 언급이 있었다.

이에 Python을 컴파일 한다는 것에 대한 의미를 알아보고자 한다.

 

Python 컴파일

파이썬은 일반적으로 인터프리터 언어로 알려져 있지만,

실제로는 "컴파일과 인터프리트 과정이 결합되어 사용"된다.

 

 

파이썬 코드의 실행은 다음과 같다.

 

1. 파이썬 코드는 소스 코드 형태로 작성

2. 이 코드는 인터프리터에 의해 한 줄씩 읽혀지고 해석됨

 

위와 같은 과정을 거쳐 파이썬 코드가 실행되며, 코드의 결과를 즉시 확인할 수 있다.

이런 특성 때문에 파이썬은 동적이고 유연한 개발 환경을 제공한다.

 


하지만 파이썬 코드는 실행하기 전에 일부 변환 과정을 거친다.

변환 과정은 파이썬 소스 코드를 바이트 코드(Bytecode)라는 중간 형태로 컴파일 되어 저장됨을 의미한다.

여기서 바이트 코드란 파이썬 가상 머신(Interpreter)에서 실행되는 인터프리터 언어다.

 

파이썬 가상 머신(Interpreter)

- 바이트코드는 파이썬 인터프리터에 의해 실행되며, 해당 코드를 실행하는 인터프리터를 가상머신이라고 부름

- 파이썬 가상머신은 파이썬 인터프리터와 그 실행을 위한 런타임 환경을 의미하는 용어로 사용

 

 

따라서 파이썬 코드를 실행할 때

실제로는 컴파일 된 바이트 코드를 인터프리터가 해석하고 실행하는 것이다.

 

 

이렇게 컴파일 된 바이트 코드는 '.pyc' 또는 'pyo' 파일로 디스크에 캐싱될 수 있어

이후 실행 시간을 단축시키는 데 도움을 준다.

 

해당 파일은 __pycache__디렉토리에 저장된다.

이후 실행 중인 파이썬 모듈이 변경되면,

인터프리터는 해당 모듈의 소스 코드를 다시 컴파일하여 새로운 '.pyc'파일을 생성하게 되고,

이후 실행 시에 재사용되며 동일한 모듈이 다시 임포트될 때 불필요한 컴파일 과정을 거치지 않는다.

 

__pycache__디렉토리

파이썬 프로젝트를 관리하면서 생성된 컴파일된 바이트 코드 파일을 저장하는 임시 디렉토리

 

 


이와 반대로 컴파일 언어는 컴파일러를 통해 바로 기계어로 변환한다.

 

컴파일 과정에서 소스 코드의 구문을 분석하고,

컴퓨터가 이해할 수 있는 기계어로 변환하는 중간 파일 또는 실행 파일을 생성한다.

이 과정에서 바이너리 코드가 생성되며, 이는 컴퓨터가 직접 실행할 수 있는 형태의 코드이다.

 


 

이로써 파이썬 소스 코드 컴파일에 대해 알게 되었다.

하지만 Dockerfile에 작성한 명령어는 아직 파이썬 소스 코드를 생성하기 이전이다.

어떤 것을 컴파일 한다는 것일까?

 

사실 make altinstall 명령어의 정확한 의미는

Python 컴파일이 아닌 Python 인터프리터 컴파일이다.

 

 

Python 인터프리터 (CPython) 컴파일

 

파이썬의 기본 인터프리터는 CPython이다.

이는 파이썬 프로그램을 실행하는 역할을 한다.

 

CPython은 C언어로 작성되어 있다.

따라서 CPython 소스 코드를 컴파일하여 실행 가능한 바이너리 형태로 변환하고

이후 생성된 바이너리는 운영 체제에서 실행할 수 있는 형태로 되어 있으며,

이를 통해 파이썬 코드를 실행할 수 있게 된다.

 

따라서 make altinstall은 C 언어 컴파일러를 사용해 CPython 소스코드를 컴파일 하는 단계를 수행한다.

 

 

앞서 설명한 Python 코드의 컴파일은 CPython이 소스 코드를 해석하고 실행하기 위해 내부적으로 수행하는 과정이며

make altinstall과는 별개의 단계이다.

 

 

 

 

 

 

Python 소스 코드의 compile 의미와

Python interpreter compile 의미는 다르다 !

 

 

 

 

'Python > 메모' 카테고리의 다른 글

[Python] 구현한 모듈 import하기  (0) 2023.05.23
[Python] vars()  (0) 2023.05.22
주피터 노트북 시작 폴더 변경하기  (0) 2022.10.13
아나콘다 설치 및 주피터 노트북 실행  (1) 2022.10.12