본문 바로가기
Python 관련 정보/Library 소개

poetry 사용법 - 파이썬 패키지 의존성 관리

by 밤이_ 2023. 7. 20.
반응형

 

파이썬을 사용하다보면 이런저런 패키지를 설치해서 사용하게 되는데, 단순히 pip install packge 를 한다면 기본적으로 가장 최신 버전이 설치된다. 그러다보니 사용하는 패키지 종류가 많아질수록 패키지들 간의 버전문제가 일어날 가능성이 커진다.

 

이를 해결하기 위해 poetry 를 사용해보자.

poetry는 패키지들 관의 버전 의존성을 자동으로 관리해주는 툴이다.

 

이런 저런 설명은 api document에 적혀 있지만, 실제로 어떻게 사용하는지 예시가 더 이해하기에 쉽다고 생각해서 예제를 만들어봤다.

 

우선, poetry를 사용해서 새로운 프로젝트를 생성해보자

아무 환경에나 pip install poetry를 이용하여 poetry를 설치하고, 원하는 디렉토리로 이동한 뒤에 아래의 new 명령어를 사용하여 프로젝트를 생성한다.

(개인적으로 이 프로젝트에서 사용할 venv를 새로 생성하는것을 추천한다. 그 편이 덜 헷갈린다)

poetry new poetry_demo

생성된 poetry-demo 프로젝트 디렉토리

그 결과 위와 같은 형태의 프로젝트가 생성된다.

생성된 직후 pyproject.toml을 확인해보자.

 

pyproject.toml은 PEP-518에서 dependency를 관리하기 위해 생긴 파일이다.

아직은 패키지가 없기 떄문에 python 버전에 대한 정보만 가지고 있다.

 

첫번째로 사용할 패키지를 추가해보자.

poetry add scikit-learn

 

아래 터미널을 보면, scikit-learn 에 필요한 다른 패키지들을 버전에 맞게 같이 설치해주고, pyproject.toml 에 설치된 scikit-learn의 버전 정보도 추가된다.

 

이번엔 의도적으로 패키지간의 버전 충돌을 만들어보자.

 가끔 사용하는 패키지인 sklego를 add해보겠다.

poetry add sklego

우선 sklego에서 필요한 패키지를 사용하려고 시도한다.

그중, llvmlit 버전이 PEP-517을 지원하지 않는다고 경고가 나왔다. 여러 의존성을 가지고 있는 패키지들의 버전이 맞지 않아 이런 경고가 계속해서 나타난다. 이때 문제가 생기는 모든 poetry add 를 이용하여 poetry에서 의존성을 확인하게 추가해준 뒤에 다시 sklego를 add 해보자.

 

진행하다 보면, numpy는 1.25.1이상아 지정되고, numba는 1.25아래 버전만 지원해서 에러가 난다.

이미 지정된 numpy 버전을 1.24로 바꿔보자

poetry add numpy==1.24

바꾼뒤 numba를 다시 추가해주고, 마지막으로 원래 목표였던 sklego를 add 해주자.

 

정상적으로 모두 설치된 모습

최종적으로 위처럼 버전이 맞춰진 환경을 구성할 수 있다.

 

이처럼 poetry는 이후에 다른 패키지를 설치할때도 버전 관리에 대한 스트레스를 훨씬 줄일 수 있는 tool이다.

 

add 만을 사용하여 아주 간단한 사용 예시지만, 이 예시는 실제로 제대로 관리 하지 않던 가상환경을 재설치 할때마다 겪었던 문제였기 때문에 다양한 상황에 유용할 것이라고 생각된다.

반응형