일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- pandas
- MLP
- C# 프로젝트
- 코딩테스트
- 자바
- python
- 머신러닝
- API
- 영화 api
- 백준
- DCP
- 딥러닝 실험 깃 버전관리
- 정규화
- 통계학
- 활성화 함수
- 자바 영화 api
- 대학원 급여
- 경사하강법
- 대학원 월급
- 디자인패턴
- 인공지능
- 딥러닝
- 파이썬 경사하강법
- 의료 ai 대학원 월급
- 자바 프로젝트
- 디자인 패턴
- Dehaze
- 인공지능 깃 버전관리
- 로스트아크
- 파이썬
- Today
- Total
대학원 일기
python의 동작 원리 본문
Python
파이썬은 인터프리터 방식의 고수준 프로그래밍 언어로 "스크립트 언어"로 분류된다.
인터프리터 언어의 특징은 코드를 한 줄씩 읽어 내려가며 실행하는 프로그래밍 언어이다.
-> 소스 코드 수정에 용이(but, 시간이 오래 걸림)
파이썬은 C언어로 구현되어 있다고 알려져있다.
이 말은 Python의 구현체가 CPython이고 이 CPython을 C언어로 구현했다.
따라서 파이썬은 C언어로 구현되어 있다고 알려져있다.
하지만 정확히 말하면 파이썬은 CPython으로 구현이 되었고 CPython이 C언어로 구현된 것이다.
CPython은 인터프리터 이면서 컴파일러이다.
우리가 작성하는 Python 코드를 bytecode로 컴파일하고 실행한다.
다시 말해 python 코드를 C언어로 바꾸는 것이 아니라
컴파일하여 bytecode로 변경하고 그 다음 인터프리터에 의해 실행이 된다.
.py 실행 → .pyc 라는 파일 생성 → .pyc를 interpret
파이썬 구현체는 인터프리터 안에 컴파일러를 내장하고 있다!
CPython
- 파이썬을 C언어로 구현한 구현체
- 인터프리터이면서 컴파일러
- 파이썬 코드를 컴파일해서 bytecode로 바꾸고 인터프리터가 실행
- .py 파일을 실행하면 .pyc파일이 생성(cpython이 컴파일한 bytecode 들어있음)
- GIL(Global interpreter lock) 사용
동작 순서
- 파이썬 컴파일러는 명령어를 바이트코드 명령어로 번역하고 이를 하드 디스크의 .pyc파일에 저장
- 파이썬 인터프리터는 .pyc를 변역하여 인터프리터 방식으로 기계어로 번역
- .py 파일을 바이트 코드 상태로 컴파일 합니다.
- PVM (Python Virtual Machine) 이라 하는 파이썬 실행 환경에 바이트코드를 전달합니다.
파이썬의 컴파일 과정은 아래와 같습니다. (정확하지 않을 수 있습니다)
- 소스 코드를 Parse Tree 로 변환합니다
- Parse Tree 를 AST(Abstract Syntax Tree) 로 다시 한 번 변환 합니다
- AST를 제어 흐름 그래프(Control FlowGraph)로 변환 합니다
- 제어 흐름 그래프를 Byte code 로 변환 합니다.
이 과정을 거치고 나면, .pyc 파일이 생성 됩니다.
👾 파이썬 가상 머신 PVM
PVM 은 파이썬의 런타임 엔진 입니다.
파이썬 시스템의 일부이기 때문에 별도의 설치가 필요하지 않고, 항상 존재 합니다.
소스 코드를 .pyc 와 같은 바이트 코드 형태로 변환한 뒤 PVM 으로 전달하면
파이썬 가상 머신은 이것을 실행해 줍니다.
추가로, 프로즌 바이너리는 내가 작성한 파이썬 프로그램을 우리가 아는 실행 파일로(.exe)
변환 하는 것 또한 가능합니다.
이를테면, PyInstaller, py2exe, py2app 등을 통해서 실행 가능한 바이너리로 만들 수 있습니다.
프로즌 바이너리를 만들 때에는 바이트 코드와, 실행 환경(PVM)
그리고 의존성 모듈을 단일 패키지로 만듭니다.
그리고 그 결과물은 실행 가능한 형태 (.exe 등) 가 됩니다
'Computer programming > python' 카테고리의 다른 글
[python] pprint: 쉽고 예쁘게 출력하기 (0) | 2022.01.21 |
---|---|
[Python] re 모듈(regex: 정규식 모듈) (0) | 2022.01.21 |
파이썬으로 데이터 다루기 (0) | 2022.01.19 |
파이썬 기초 문법 III (0) | 2022.01.19 |
파이썬 기초 문법 II (0) | 2022.01.11 |