Framework/Django

Poetry 설치 및 기초 세팅

JM Lee 2023. 6. 7. 01:55
728x90

Poetry는 의존성 관리 및 파이썬 내 패키징을 위한 툴이다.

프로젝트가 의존하고 있는 라이브러리들을 관리(설치, 업데이트 등)해준다.

자세한 내용은 공식문서

 

 

설치 방법

 

osx / linux / bashonwindows은 아래 curl url을 터미널에 입력해서 설치하면 된다. Poetry bin 디렉토리에 설치되고, 유닉스에서 위치는 $HOME/.poetry/bin 이다.

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

설치 후 shell에 환경 변수를 설정해주고, shell을 닫았다가 열면 poetry를 터미널에 쳤을 때 읽을 수 있게 된다.

vi .zshrc 

# 파일에 아래 command 추가
export PATH="$HOME/.poetry/bin:$PATH"

 

의존성

 

의존성은 코드에서 두 모듈간의 연결이다.

객체지향언어에서는 두 클래스 간의 관계라고도 말하고, 일반적으로 둘 중 하나가 다른 하나를 어떤 용도를 위해 사용한다.

하나의 모듈이 바뀌면 의존하고 있는 다른 모듈까지 변경이 이루어져 수정이 필요하게 된다.

 

의존성 관리가 중요한 이유 중 또 다른 하나는 다음과 같다.

내가 만약 오픈소스 프로젝트를 찾아서 최단경로 API, 음성API 등을 조합해 네이게이션 앱을 만들었다고 가정하자.

만약에 내가 모듈을 직접 포함하면 버그가 있을 가능성, 혹은 구버전일 가능성을 확인하지 못하고 배포하게 될 수 있다.

 

내가 일일이 모듈을 추가하고 관리하는 것이 아니라, 의존성 관리자가 내가 사용하고 있는 모듈을 일괄적으로 처리해줌으로써 API가 최신인지 확인하고 버그가 없는지 등 모든 것일 방지할 수 있게 된다.

 

PIP와의 차이점

  • pip은 lock파일이 없고, 직접 requirements.txt를 작성해야 한다.
  • poetry는 lock 파일과 pyproject.toml(requirements.txt 같이 설치한 패키지를 리스팅해놓은 파일)을 자동으로 생성 및 업데이트해준다.
  • pip는 항상 전역에 모든 패키지를 설치한다. 한 프로젝트에만 설치가 아닌 모든 프로젝트에 공통적으로 설치함.
  • poetry는 poetry.lock이라는 락 파일을 생성하며, Pipenv와 비교하여도 Dependency Resolving 에서 강점이 있다.
  • pip은 전역에 패키지를 설치하기 때문에, 해당 설치툴로는 다른 환경에서의 버전 관리가 불가하다.
  • poetry는 가상환경 여부를 확인하고 기존 환경, 혹은 새로 만들어 설치하는 등 자동으로 관리해준다.

 

사용법

 

 

프로젝트 세팅

 

poetry new poetry-demo

poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_poetry_demo.py

 

pyproject.toml

name = "poetry-demo" # 프로젝트의 이름을 설정
version = "0.1.0" # 프로젝트의 버전을 설정
description = "" # 프로젝트의 설명을 설정
authors = ["Sébastien Eustace <sebastien@eustace.io>"]  #  프로젝트의 저자(들)을 설정

[tool.poetry.dependencies] # 의존성 추가 : 프로젝트의 종속성을 설정하는 섹션
python = "*"

[tool.poetry.dev-dependencies] # : 프로젝트의 종속성을 설정하는 섹션
pytest = "^3.4" # 프로젝트 개발에 필요한 pytest 버전 3.4 이상을 허용하도록 설정

pyproject.toml 파일을 변경할 필요 없이 아래 command를 통해 수정이 가능하다.

requirements.txt는 내가 계속 업데이트를 해줘야 하는 반면, Poetry는 알아서 add해주는게 장점이다.

poetry add pendulum

Poetry Lock

프로젝트에 정의된 의존성 파일들을 설치하기 위해 아래 command를 사용하면 된다.

poetry install

이 파일은 모두가 같은 의존성 환경에서 개발할 수 있도록 도와준다.

install을 했을 때 둘중 하나의 상황이 생길 수 있는데,

 

Installing without poetry.lock

poetry.lock 파일이 없는 상태에서 install command를 실행했을 경우,

poetry는 pyprojet.toml에 있는 패키지들의 모든 의존성을 해결하고 가장 최신 버전으로 다운로드 하게 된다.

설치가 끝나면 패키지의 정확한 버전을 명시해 특정 버전에 프로젝트를 locking한다.

lock 파일은 프로젝트 레포에 commit해야 모든 구성원들이 같은 버전의 의존성을 가질 수 있다.

 

Installing with poetry.lock

이미 poetry.lock 파일이 있다면 이전에 나 혹은 프로젝트의 다른 구성원이 install command를 한 이력이 있다는 뜻이다.

이 때 일관성을 유지하기 위해 install command를 하더라도 최신 버전을 다운받는 것이 아니라,

새로운 버전이 Released됐더라도 lock 설정에 맞는 파일을 다운받게 된다.

 

의존성에서 예상치 못한 변화가 생기지 않도록 관리해주는 것이다.

 

만약 최신 버전으로 업데이트하고 싶으면 update command를 써주면 된다.

그러면 pyproject.toml을 기반으로 최신 매칭 버전을 lock file에 업데이트 해준다.

 

만약 pyproject.toml과 poetry.lock이 일치하지 않으면 poetry가 경고를 보낸다.

 

사용 환경

 

poetry의 핵심적인 기능 중 하나가 바로 프로젝트 환경 독립이다.

다른 말로 파이썬 설치를 전역적으로 하지 않고 분리한다는 의미인데,

이를 위해서는 현재 가상 환경이 돌아가고 있는지를 확인하는 것이 필요하다.

 

만약 가상환경이 있으면 새로운 환경을 만들지 않고 기존 환경에 패키지를 설치하고,

그게 아니면 환경을 만든 뒤 패키지를 설치하게 된다.

 

가상 환경을 만들 때 파이썬 버전은 가장 최근에 활성화된 파이썬 버전을 기준으로 한다.

내 프로젝트에 맞는 파이썬 가상환경을 만들기 위해서는 프롬프트에 pyenv를 통해 명시적으로 활성화시켜주는 것이 좋다.

# 가상환경 정보 제공

❯ poetry env info

Virtualenv
Python:         3.7.6
Implementation: CPython
Path:           /Users/yeni/Library/Caches/pypoetry/virtualenvs/board-project-YxfDBa-d-py3.7
Valid:          True

System
Platform: darwin
OS:       posix
Python:   /Users/yeni/miniconda3
# 가상환경 확인 : 프로젝트와 연관된 가상환경 띄워주기

poetry env list

test-O3eWbxRl-py2.7
test-O3eWbxRl-py3.6
test-O3eWbxRl-py3.7 (Activated)

 

참고 사이트

'Framework > Django' 카테고리의 다른 글

[트러블 슈팅] 환경설정..  (0) 2023.06.09
poetry 기본 명령어 모음  (0) 2023.06.07
데이터 관계 모델 정리  (2) 2023.05.18
DRF 심화과정 4주차  (0) 2023.04.23
DRF 심화과정 3주차  (0) 2023.04.23