네이버 부스트캠프 🔗/⭐주간 학습 정리

파이썬 버전 관리

Dobby98 2023. 4. 25. 12:22

본 글은 네이버 부스트 캠프 AI Tech 기간동안

개인적으로 배운 내용들을 주단위로 정리한 글입니다

 

본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고

복습 중요도를 선정해서 정리하였습니다

 

✅ Week 8

1.버전 관리

2. 파이썬 버전관리

 + Pyenv 설치

3. 파이썬 프로젝트 버전 관리

+ Poetry

 


1. 버전 관리

우리는 Pytorch 또는 Python과 같은 소프트 웨어 심지어, GUI 프로그램 - LoL 클라이언트 버전등

다룰때도 정체모를 숫자들과 마주친다

 

가장 익숙한 버전을 예시로 들어보면 '스타크래프트1.1.61'과 같이 프로그램 뒤에 오는 숫자가 버전을 의미한다

그렇다면 버전의 정의는 무엇일까? 

 

버전 Version? : 소프트웨어 제품의 특정 릴리스에 대한 고유한 식별자

 

즉, 소프트웨어가 출시되거나 새롭게 업데이트될때 해당 버전을 특정한 번호를 부여하는데 이를 버전이라고 한다

또한 이러한 번호와 이름을 부여하는 과정을 버저닝이라고 한다

 

버저닝 Versioning ? : 소프트웨어에 Unique한 버전 이름, 번호를 할당하는 과정이다


이러한 버저닝에는 여러 방법이 존재한다 천천히 살펴보자

1. CalVer - Calendar Versioning

: 날짜 기반 시스템을 활용하여 버전번호를 할당한다 

ex Ubuntu 20.04

 

2. SemVer - Semanctic Versioning

마침표로 구분된 주번호, 부번호, 패치 번호로 구성

이전 버전와 호환되지 않을 경우 주 번호가 증가

이전 버전과 호환이 되며 새로운 기능이 추가 되면 부 번호 증가

이전 버전의 버그가 수정되면 패치 번호 증가

ex Python 3.11.0

 

3. HashVer - Hash Versioning

: SHA - 1, SHA-256 해시 알고리즘을 사용해서 고유 식별자 생성

ex Git Commit 7e6d3fd 등 코드를 관리할 때 Hash Ver가 자주 사용

 


그렇다면 버전을 왜 필요한 것일까?

바로 팀내 협업 과정에서 소통을 원활하게 해줄 수 있고 

우리가 업데이트하거나 출시한 소프트웨어를 사용자에게 공지할 때 어려움을 해소해준다

 

만약 우리가 만든 소프트웨어가 한번만 출시하고 끝낼 것이라면 굳이 버전을 만들 필요가 없다

하지만 지속적으로 서비스를 업데이트 해주고 이를 발전시켜 나갈 것이라면 버전은 필수이다


2. 파이썬 버전 관리

파이썬의 경우 SemVer 방식으로 버저닝을 하고 있다

 Python 3.11.0

 

파이썬의 버전을 살펴보면 각 버전의 호환성을 파악할 수 있다

- 파이썬 3.11.x은 아래의 3.9.x, 3.8.x를 호환한다. 즉, 3.9, 3.8에서 형성한 코드도 3.11에서는 잘 작동한다

- 단 패키지의 경우 지원하지 않을 수 있다 -> 이는 패키지의 호환성 문제이다

 

-하지만 3.x 버전은 2.x 를 호환하지 않는다 : 주번호가 변한걸 확인하길 바란다

 

이렇듯 파이썬 버전을 프로젝트에 표시해주어야 사용자나 다른 개발자가 이용을 할때 문제가 발생하지 않는다

대부분 Git hub에 올린 프로젝트의 경우 README.md에 작성을 해준다

 


그렇다면 파이썬의 버전은 어떻게 관리할 수 있을까?

우선 파이썬을 설치하는 방법은 매우 다양한다

 

1. 파이썬 공식 홈페이지에서 다운로드

: 그냥 공식 홈페이지에서 버전을 선택해서 다운하면된다

 

2. Conda로 설치

: conda install python = 버전번호

Conda가 설치되어 있는 상황에서 위의 명령어를 터미널에 입력해서 설치할 수 있다

이는 파이썬의 버전관리를 conda에 맡길 수 있다는 장점이 있다

하지만 conda라는 프로그램 자체가 가볍지만은 않기 때문에 뒤에서 이야기 하겠지만 단점도 존재한다

 

3. Docker로 이미지 설치

: docker pull python:3.11.0

Docker가 설치되었다는 가정에서 파이썬 버전 관리를 컨테이너 이미지로 설치할 수 있다

파이썬을 사용하고 싶다면 docker run -it python python으로 실행 & 접속이 가능하다

 

4. 패키지 관리자 - brew, apt, winget로 설치

: Mac - brew, Linux - apt, Window - winget등의 패키지 관리자로 설치할 수 있다

예시 : Linux - apt install python3.11

 

5. pyenv로 설치

파이썬의 여러버전을 CLI로 쉽게 설치할 수 있다

python 뿐만아니라 여러 버전을 쉽게 설치할 수 있다

또한 표준화된 인터페이스를 제공하기 때문에 많은 사람들이 사용한다

pyenv install 3.11.0


이렇듯 파이썬을 설치하는 방법도 너무 많이 존재한다

그런데 이런 여러 방법을 섞어서 사용하게 되면 충돌이 발생할 수 있다

 

예를 들어 Conda와 pyenv를 같이 사용하게 되면

pyenv의 버전은 무시되고 conda만 계속 호출되게 된다. pyenv의 버전을 사용하고 싶다면 해당버전 번호를 명시적으로 표현해주어야한다 - 불편

따라서 파이썬 설치 전 지금 사용하는 python이 어디에 설치된 것인지 확인하는 과정이 필수적인데

which python

으로 확인할 수 있다


✅ Pyenv 설치

 

[Python] pyenv 설치 방법

make 와 git , python 은 기본적으로 설치되어 있어야 함 (python 버전은 최신 버전이 좋음) 1. dependencies 를 설치 https://github.com/pyenv/pyenv/wiki#suggested-build-environment Mac OS X: brew install openssl readline sqlite3 xz zl

eyeballs.tistory.com

 

 

pyenv란? pyenv 사용하기

이 글은 다음 글을 번역하여 정리한 글입니다. https://realpython.com/intro-to-pyenv/ 목차 · pyenv란? · pyenv 설치하기 · 파이썬을 설치하기 위해 pyenv 사용하기 · pyenv로 사용할 파이썬 버전 지정하기 · 가

scshim.tistory.com

 

 

pyenv를 사용하여 Python 버전 관리하기

동일한 머신에서 여러 Python 버전을 사용하기 위해 pyenv를 사용하는 방법에 대해서 알아보겠습니다.

dev-yakuza.posstree.com

 


3. 파이썬 프로젝트 버전 관리

파이썬을 접하다 보면 '가상환경'이라는 개념을 무조건 마주치게 된다

앞에서 살펴본 Conda가 그러한 예시이다

 

만약 가상환경이 존재하지 않는다면 문제가 있다

바로 다른버전의 패키지가 설치된 컴퓨터에서는 프로젝트 소프트웨어가 작동하지 않을 수 있다는 것이다

 

가상환경을 만드는 방법도 다양한다

- venv

- conda

- pyenv-virtualenv

- pipenv

 

특히 venv의 경우 가장많이 사용되는 방법으로

python -m venv '가상환경 폴더 경로'

의 방법으로 만들 수 있다

 

venv의 경우 python의 내장 모듈이기 때문에 이미 설치 되어 있다

따라서 프로젝트 최상위 경로에 .venv를 만드는 습관을 가지기만 하면된다

 

또한 이렇게 만든 가상환경은

3. 파이썬 프로젝트 버전 관리

source“가상환경폴더/bin/activate”

을 통해서 접속이 가능하다

 


뿐만아니라 프로젝트를 진행하다보면 여러 패키지를 가져와서 사용하게 되는 경우가 많다

이를 위해서 파이썬의 패키지 매니저가 존재하는데, 크게 3가지가 있다

- pip

- poetry

- conda

 

pip의 경우 가장 많이 사용하는 내장 패키지 매니저로

pip install '패키지이름'

의 방식으로 패키지를 설치할 수 있다 

물론 의존성 패키지 까지 같이 설치해준다

 

또한 

 

를 통해서 현재 설치된 패키지의 목록을 출력할 수 있다

pip list —not-required—format=freeze(의존성패키지제외 하여서 출력)

 

또한 이렇게 설치된 프로젝트의 패키지 목록을 requirements.txt 파일로 변환해서 저장할 수 있다

pip freeze > requirements.txt

 

이렇게 변환된  requirements.txt 는 추후에 다른 컴퓨터 환경에 설치할때 손쉽게 패키지 목록을 불러와 설치할 수 있게 해누다

pip install-r requirements.txt

하지만 pip의 치명적인 단점이 존재한다

 

1. 개발환경과 배포 환경의 패키지가 분리되지 않는다

즉, 개발에 사용되는 패키지와 서비스 배포 후 사용되는 패키지가 다를 수 있다

쉽게 말해서 개발에만 사용되는 패키지가 있을 수 있다는 것

 

즉, 서비스 배포 관점에서 이를 보면 사실 개발에만 사용되는 패키지는 굳이 배포에 사용할 필요가 없다

용량만 먹을 뿐이기 때문이다

 

따라서 이를 분리해준다면 효율적인 소프트웨어를 만들 수 있을 것이다

그러나 pip는 이를 허용해주지 않는다, 개발이든 배포든 모든 패키지를 포함시켜버린다

 

2. pip list로 패키지간 의존성을 파악하기 힘들다

예를 들어서 torchvision과 같은 패키지는 pytorch를 필요로 한다

하지만 이때 pip list만을 활용해서 현재 torchvision이 어떤 pytorch 버전을 필요로 하는지 파악할 수가 없다

 

3. pip uninstall이 의존성 패키지까지 제거해주지 않는다

설치과정에서 그 패키지에 필요한 의존성 패키지도 설치되어 있을 것이다

그렇다면 만약 우리가 그 패키지를 제거한다고 했을 때 pip unistall은 의존성 패키지까지 제거해주지 않는다

만약 의존성 패키지가 우리가 제거하고 싶은 패키지에만 사용되는 패키지라면 굳이 설치하고 있을 필요가 없는데도 말이다

 


따라서 이를 위해 Poetry라는 대체재가 등장하였다

 

python 용 의존성 관리자(dependency manager) - poetry 사용법

 

www.lesstif.com

간단하게 설치이후

poetry init

명령로 파이썬 프로젝트를 초기화 해준다

그리고 프로젝트 경로에 pyproject.toml이 생성되는 것을 확인할 수 있는데

poetry add

를 사용해서 패키지를 설치해줄 수 있다

이때 

poetry add -D

라고 개발 옵션을 붙이면 개발 환경에서만 사용할 패키지를 설치할 수 있다

 

물론 이러한 구분은 pyproject.toml에 기록된다

 

poetry show --tree

를 사용하면 패키지 사이의 의존성도 출력된다