Python/메모
-
[Python] 파이썬 실행 과정 (Python Compile) 2023.06.01
-
[Python] 구현한 모듈 import하기 2023.05.23
-
[Python] vars() 2023.05.22
-
주피터 노트북 시작 폴더 변경하기 2022.10.13
-
아나콘다 설치 및 주피터 노트북 실행 1 2022.10.12
[Python] 파이썬 실행 과정 (Python Compile)
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 |
[Python] 구현한 모듈 import하기
아래와 같은 폴더 구조를 가정하자.
📁 source
└ 📁 vo
└ dataVO.py
└ 📁 util
└ mongoDBUtil.py
main.py
실행할 파일이 main.py라면
mongoDBUtil의 import 경로는 main.py를 기준으로 한다.
# main.py
import source.util.mongoDBUtil
mongoDBUtil.메소드명()
mongoDBUtil.py에서 dataVO.py를 imprort할 경우에도 기준은 main.py가 된다. (실행파일)
따라서 같은 source 폴더 밑에 위치하고 있더라도 main.py파일 기준으로 source를 포함한 경로를 적어줘야 한다.
# mongoDBUtil.py
import source.vo.dataVO
📁 source
└ 📁 vo
└ dataVO.py
└ 📁 util
└ mongoDBUtil.py
└ main.py
위와 같이 main.py도 source 폴더 밑에 위치하고 있다면
source.을 제외하고 import한다.
[Python] from과 import
import import 모듈명 형식으로 사용합니다. 모듈 전체를 임포트합니다. 임포트한 모듈의 이름을 사용하여 모듈 내의 함수, 변수, 클래스 등에 접근합니다. 사용 시 모듈명을 함께 사용해야 합니다.
sso-y.tistory.com
'Python > 메모' 카테고리의 다른 글
[Python] 파이썬 실행 과정 (Python Compile) (0) | 2023.06.01 |
---|---|
[Python] vars() (0) | 2023.05.22 |
주피터 노트북 시작 폴더 변경하기 (0) | 2022.10.13 |
아나콘다 설치 및 주피터 노트북 실행 (1) | 2022.10.12 |
[Python] vars()
vars()
파이썬 내장 함수
객체의 속성과 값으로 이루어진 딕셔너리 반환
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("John", 30)
print(vars(person))
{'name': 'John', 'age': 30}
'Python > 메모' 카테고리의 다른 글
[Python] 파이썬 실행 과정 (Python Compile) (0) | 2023.06.01 |
---|---|
[Python] 구현한 모듈 import하기 (0) | 2023.05.23 |
주피터 노트북 시작 폴더 변경하기 (0) | 2022.10.13 |
아나콘다 설치 및 주피터 노트북 실행 (1) | 2022.10.12 |
주피터 노트북 시작 폴더 변경하기
작성 중
아나콘다 프롬프르에서 jupyter notebook --generate-config
해당 경로에 가서 jupyter_notebook_config.py 파일 text editor로 열기
# c.NotebookApp.notebook_dir = '' 를 찾아
주석을 지우고 '원하는 경로' 추가하기
jupyter Notebook 속성 변경하기
"%USERPROFILE%/"를 위에 작성한 원하는 경로로 변경
'Python > 메모' 카테고리의 다른 글
[Python] 파이썬 실행 과정 (Python Compile) (0) | 2023.06.01 |
---|---|
[Python] 구현한 모듈 import하기 (0) | 2023.05.23 |
[Python] vars() (0) | 2023.05.22 |
아나콘다 설치 및 주피터 노트북 실행 (1) | 2022.10.12 |
아나콘다 설치 및 주피터 노트북 실행
1. 아나콘다 설치
https://www.anaconda.com/products/distribution
Anaconda | Anaconda Distribution
Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.
www.anaconda.com
위 링크에 접속하여 아나콘다를 다운받는다.
※ 기존 로컬에 Python을 설치한 경우 path가 꼬이는 걸 대비해 삭제하고 설치 권장
아나콘다 설치 진행 중 설치 경로 설정에서 오류가 나는 경우
사용자 계정명이 한글이어서 나는 오류이다.
새로운 path를 설정하거나 all user로 선택 시 자동으로 설정되는 경로가 user 밑을 포함하지 않아 오류 없이 진행 가능
2. jupyter notebook 실행
Anaconda navigator를 실행한다. (일정 시간 소요됨)
launch로 표시된 프로그램들은 설치된 것이다.
Notebook launch를 클릭하여 주피터 노트북을 실행한다.
이 때, 실행이 되지 않는다면 앞서 언급한 경로에 한글이 포함된 경우이다.
Jupyter notebook (Anaconda3)을 실행하여 아래 주소로 들어가면 실행할 수 있다.
'Python > 메모' 카테고리의 다른 글
[Python] 파이썬 실행 과정 (Python Compile) (0) | 2023.06.01 |
---|---|
[Python] 구현한 모듈 import하기 (0) | 2023.05.23 |
[Python] vars() (0) | 2023.05.22 |
주피터 노트북 시작 폴더 변경하기 (0) | 2022.10.13 |