본문 바로가기
Notes

[Poetry] Poetry를 사용해 프로젝트 버전 관리하기

by Yonghip 2023. 5. 1.

기존에는 pip나 conda를 이용해서 버전을 관리했었는데 부캠을 하며 많은 사람들이 poetry를 이용해서 project를 관리했고 꽤 편리하다는 얘기를 들어 직접 사용해보고 정리해보려한다.

 

Poetry 환경 생성

보통 두가지 command 중 하나로 Poetry환경을 생성한다.

#현재 디렉토리에 새 프로젝트 폴더 생성
poetry new poetry_project

#기존 프로젝트를 poetry환경으로 초기화
mkdir poetry_init
cd poetry_init
poetry init

 

이후 이런 형태의 pyproject.toml을 생성된다.

 

 

poetry 프로젝트 생성이 아닌 환경 생성으로 적은 이유는 poetry init이나 new를 실행할 시 완전히 다른 새로운 환경을 생성해주기 때문이다.

poetry env info 커맨드로 생성한 가상환경의 위치를 확인할 수 있다.

 

 

가상환경을 킨 뒤에 실행시켜보면 가상환경의 python을 가리키고 있는걸 확인할 수 있다. poetry는 환경생성시 자동으로 PATH에 있는 python버전을 따르게 된다고 했는데 필자는 보통 conda에서 3.9.15버전의 파이썬을 사용했고 터미널에서도 버전이 그에 맞게 출력되었지만 자동적으로 기본python위치를 참조해서 가상환경을 생성해주기에 이런 상황은 미리 주의해야할 것 같다.

 

 

위와 같은 문제를 인지했을 시 아래와 같이 연동하고자 하는 파이썬의 위치를 기반으로 가상환경을 설치할 수 있다.

poetry env use /home/hykhhijk/anaconda3/envs/myenv/bin/python

성공적으로 참조하는 python위치를 변경한것을 확인할 수 있다.

 

 

 

Poetry cheatsheet

라이브러리 설치 및 의존성 관리에 대한 단축키를 몇개 알아보겠다. 

 

패키지 설치

poetry add [패키지명]

 

설치한 패키지 확인

poetry show

설명이 추가된점 말고 pip list와 큰 차이는 없다

 

 

설치한 패키지의 의존성 확인

poetry show --tree

우리가 install한 패키지와 그 패키지를 위해 자동적으로 install된 패키지의 의존성을 보여준다.

개인적으로 굉장히 유용하다고 생각되는 기능 중 하나이다.

 

 

lock파일 생성 혹은 연동

poetry install

pip install -r requirements.txt와 유사하다고 보면된다.

기존의 lock파일을 기준으로 패키지를 설치해주며 lock파일이 없을때는 현재의 pyproject.toml을 기준으로 lock파일을 생성해준다.

 

 

 

패키지 삭제

poetry remove [패키지 명]

 

여기서 하나 더 편리했던 점은 의존하고 있는 모든 패키지를 함께 지워준다는 점이었다.

기존에는 pip uninstall torch 커맨드로는 의존된 패키지들이 삭제되지 않았는데 poetry는 모든 의존 클래스가 같이 삭제되는걸 확인할 수 있다.

 


아직 완전히 기능을 파악하지는 못했지만 의존성 관리면에서 굉장히 편리한 패키지인것 같다.

또 위에 적어놓지는 않았지만 이미 lock파일이 있다면 lock파일이 toml파일을 자동적으로 반영한다.

만일 새로운 패키지가 이전에 설치한 패키지와 의존성이 겹치는데 이를 poetry가 반영하지 못하면 에러가 잡히긴 할것 같은데 아직까지는 이러한 일이 없었다. 아마 poetry가 알아서 잡아주는것 같은데

아직 커뮤니티가 활발한것 같지는않아 안정적으로 사용하기 위해서는 조금 더 스터디가 필요할 것 같다.