파이썬 버전 관리
버전 관리
버전
- 소프트웨어 제품의 특정 릴리스에 대한 고유한 식별자
- 소프트웨어가 처음 출시 되었을 때나 업데이트가 이루어질 때 마다 새로운 버전 번호를 부여함
- 깃 커밋 해시도 버전에 해당
버저닝
- 소프트웨어에 Unique한 버전 이름, 버전 번호를 할당하는 과정
- 버전을 정의하는 방법

CalVer
- 날짜 기반 버전 할당
- 연도와 월로 구성
- 이해하기 쉬움, 출시 시기 예측 수월, 유연한 접근 가능
SemVer
- 마침표로 구분된 주 번호, 부 번호, 패치 번호로 구성

- 이전 버전과 호환되지 않은 변경이 있는 경우 주 번호가 증가
- 이전 버전과 호환되는 새로운 기능이 추가되면 부 번호 증가
- 이전 버전의 버그 수정이 진행되면 패치 번호 증가
HashVer
- SHA-1, SHA-256 해시 알고리즘을 사용해 버전에 대해 고유 식별자를 생성
- 코드가 변경될 때마다 해시가 변경되므로, 모든 버전이 고유한 식별자를 가지도록 보장
어떤 버저닝 방법을 사용하는 것과 상관 없이 코드의 특정 상태를 적당히 표현하는 것이 핵심
Why Version?

- 특정 상태에 대한 통일된 명칭이 없어 커뮤니케이션이 어려움

- 릴리스에 대한 통일된 관점이 없어 커뮤니케이션이 어려움


파이썬 버전 관리


- 파이썬 버전은 항상 명시
- Github README.md에 작성
파이썬 3.11 설치하기
파이썬 공식 홈페이지
Conda
conda install python=3.11.0
Docker로 파이썬 이미지
- Docker로 파이썬 3.11.0 이미지 설치
docker pull python:3.11.0
- 파이썬 버전관리를 컨테이너 이미지로 진행
- docker run -it python python으로 Docker 컨테이너 실행 및 접속
패키지 관리자
Mac OS
brew install python@3.11
Linux
apt install python3.11
Window
winget install Python3.11
Pyenv
- 파이썬의 여러 버전을 CLI로 쉽게 설치할 수 있는 도구
pyenv install 3.11.0
- 어떤 방식이 파이썬 설치의 표준일까?
- 파이썬 설치 시 여러 방법을 섞어쓰면 충돌이 날 가능성이 존재



파이썬 프로젝트 버전 관리
가상 환경
- 가상 환경이 없으면 어떤 문제가 있을까
- 프로젝트를 하나만 할 때는 큰 이슈가 되지 않음
- 프로젝트가 여러 개 생기면 라이브러리 끼리 충돌
venv
- 여러가지가 있지만, 대표적인 가상 환경인 venv 소개
- 파이썬 가상 환경 구축에 가장 많이 사용 됨
python -m venv .venv
- 보통 프로젝트 최상위 경로에서 .venv로 만드는 것이 관습
source .venv/bin/activate
패키지 매니저
pip
- 파이썬 내장 패키지 매니저
- pip install pandas
pip freeze > requirements.txt
pip install -r requirements.txt
- 다음 코드를 통해 다른 컴퓨터에서 그대로 설치 가능
pip install --upgrade pip
- 다음 코드로 pip를 업그레이드하고 사용하기를 권장
문제점
- 개발 환경과 배포 환경의 패키지가 분리되지 않음
- pip list로는 패키지간 의존성을 알 수 없음 (이거 왜 생겼지?)
- pip uninstall로 의존성이 있던 패키지들은 삭제되지 않음
- 즉 정교한 패키지 관리가 쉽지 않음
Poetry
poetry init
- 다음 명령어로 파이썬 프로젝트를 초기화
- pyproject.toml이라는 파일이 생성 됨
- 파이썬 프로젝트에 대한 메타 정보를 담고 있는 타입
poetry add -D
- 다음과 같은 명령어로 패키지 설치
- -D 인자로 개발환경에만 사용할 지 설정할 수 있음
- pyproject.toml 에서 개발환경에 설치된 패키지와 그렇지 않은 것을 구분할 수 있음
- pip의 문제점을 해결할 수 있음