ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python | Python 내부 동작과정
    python 2022. 1. 24. 13:22

    내부적으로 파이썬 코드를 실행했을 때 어떻게 동작하는지 정리해보려고 합니다.

     

    Python Interperter

    파이썬은 인터프리터 언어라고 합니다.

    파이썬 코드를 작성할 때 인터프리터는 프로그램을 읽고 그 안의 명령을 실행하는 역할을 합니다.

     

    인터프리터의 실행 과정을 정리해보면 다음과 같습니다.

     

    1. 파이썬 코드를 작성합니다.
    2. 컴파일러는 소스 코드를 받습니다.
    3. 컴파일러는 소스 코드에서 각 줄의 구문을 확인합니다.
    4. 컴파일러에 오류가 발생하면 오류 메시지(Syntax error)와 함께 중지됩니다.
    5. 구문 확인 후 소스 코드를 바이트코드로 변환합니다.
    6. 바이트코드는 PVM(Python Virtual Machine)으로 전송됩니다.
    7. 입력 및 라이브러리 모듈과 함께 바이트 코드가 PVM에 대한 입력으로 제공됩니다.
    8. PVM은 바이트코드를 실행하고 오류가 발생하면 오류 메시지(Runtime error)를 표시합니다.
    9. 실행에 오류가 없으면 결과가 출력됩니다.

     

    파이썬 코드 작성

    # hello_python.py
    class Hello:
        def __init__(self, text) -> None:
            print(f'Run Init {text}')
    
    h1 = Hello('Hello World')
    

     

    파이썬 컴파일

    python3 -m compileall ./hello_python.py
    

    컴파일하는 과정에서 Syntax 체크를 진행하고 문제가 없을 경우 소스코드를 바이트코드로 변환합니다.

    이때 컴파일 후 변환된 바이트 코드는 __pycahe__폴더 아래에 다음과 같이 pyc파일로 생성되는 것을 확인할 수 있습니다.

     

    complie_test
    ├── __pycache__
    │   └── hello_python.cpython-38.pyc
    └── hello_python.py
    

    바이트 코드는 소스 코드와 기계 코드의 중간 코드입니다.

    바이트 코드는 인터프리터에 의해 기계 코드로 변환된 후 기계(컴퓨터)에서 읽을 수 있게 됩니다.

     

    바이트 코드 확인

    해당 바이트 코드는 파이썬의 dis모듈을 이용하여 확인해 볼 수 있습니다.

    # disassembly.py
    import hello_python
    import dis
    
    # 바이너리 코드 확인
    dis.dis(hello_python)
    
    # ------------------------------------------------------------
    Disassembly of Hello:
    Disassembly of __init__:
      3           0 LOAD_GLOBAL              0 (print)
                  2 LOAD_CONST               1 ('Run Init ')
                  4 LOAD_FAST                1 (text)
                  6 FORMAT_VALUE             0
                  8 BUILD_STRING             2
                 10 CALL_FUNCTION            1
                 12 POP_TOP
                 14 LOAD_CONST               0 (None)
                 16 RETURN_VALUE
    

    해당 바이트 코드는 인터프리터의 PVM으로 전송되어 기계어로 변환됨으로써 해당 프로그램이 실행됩니다.

     

    CPython

    Cpython은 C언어로 파이썬을 구현한 것입니다. python코드를 이해하고 한줄한줄 읽으며 cpu가 이해할 수 있게 번역하는 일을 합니다.

    CPython은 Python의 기본 인터프리터로 사용되고 있습니다.

     

    CPython과 Python의 차이점

    CPython은 python.org에서 다운로드한 Python의 구현입니다.

    Python은 CPython에 의해 실행되는 프로그래밍 언어입니다.

     

    마무리

    간단하게 정리하긴 했지만, 파이썬 코드가 어떤 식으로 동작하게 되는지 정리해보는 시간이었던 거 같습니다.

    앞으로 공부해 나가면서 더 내부적인 원리들에 대해서 공부해보는 시간도 필요할 것 같다는 생각이 들었습니다.

     

    감사합니다.

     

     

    참고자료

    http://kimwooseok.com/python/2021/06/29/python-compile/

    https://www.c-sharpcorner.com/article/why-learn-python-an-introduction-to-python/

    https://medium.com/@kaushik.k/internal-working-of-python-415572929e7a

    https://techvidvan.com/tutorials/python-interpreter/

    https://medium.com/@kaushik.k/internal-working-of-python-415572929e7a

    http://kimwooseok.com/python/2021/06/29/python-compile/

    'python' 카테고리의 다른 글

    Python | Python 데코레이터(Decorator)  (0) 2022.01.26
    Python | Python 일급 함수(First Class function)  (0) 2022.01.26
    Python | Class에 대해서  (0) 2022.01.23
Designed by Tistory.