Poetry: Python 패키지 의존성 관리 tool
본 포스팅은 Github을 통한 협업을 진행하면서, 팀원들 간에 모두 같은 환경을 공유할 목적으로 파이썬 패키지 의존성 관리 tool인 Poetry를 활용하기 위하여 관련한 기초 조사를 진행한 내용입니다.

01 Poetry란?
poetry
Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. Poetry offers a lockfile to ensure repeatable installs, and can build your project for distribution.
즉 Poetry는 파이썬 패키지 의존성 관리 tool입니다. 패키지 간의 의존성을 관리해줄 뿐만 아니라, poetry.lock 파일을 통해 다른 환경에서도 똑같은 패키지 의존성을 재현할 수 있습니다.
pyproject.toml & poetry.lock
- pyproject.toml과 poetry.lock은 모두 기본적으로 패키지 종속성을 기록하는 파일입니다.
- pyproject.toml
- 프로젝트의 이름, 버전, 설명, 저자 등 메타데이터와 프로젝트가 필요로 하는 패키지의 이름과 버전 범위가 명시됩니다.
- 우리가 직접 이 파일을 작성해서 수정할 수 있습니다.
- poetry.lock
- 프로젝트의 정확한 의존성 상태를 기록한 것입니다.
- 각 패키지의 정확한 버전과 그 패키지가 의존하는 다른 패키지들의 정확한 버전까지 포함합니다.
- poetry install이 실행될 때 자동으로 생성되거나 업데이트 됩니다.
- 우리가 직접 이 파일을 작성해서 수정하는 것은 불가능합니다.
- 프로젝트의 정확한 의존성 상태를 기록한 것입니다.
결국 둘 다 패키지 종속성을 기록하는 역할을 하는데, pyproject.toml에서 A 라이브러리가 ‘나는 매운거’, B 라이브러리가 ‘나는 국물 있는거’, C 라이브러리가 ‘나는 중식’ 이라고 했을 때, poetry.lock이 마라탕을 만들어놓는 식인 것입니다.
02 Usage
poetry 가상환경 활성화
pyproject.toml과 poetry.lock 파일이 있는 폴더에서 다음 명령어를 실행합니다.
poetry shell
그러면 프롬프트 앞부분에서 다음과 같이 가상환경이 활성화된 것을 볼 수 있습니다.
(finalproject-py3.9) root@[고유번호]:~/level3_nlp_finalproject-nlp-12/finetuning#
이 때, finalproject-py3.9 이외의 다른 가상환경 (conda 등)이 함께 activate되어있는 경우, 모두 deactivate 해주셔야 합니다.
이제 현재 가상환경에 어떤 패키지들이 설치되었는지 확인해봅시다.
poetry show
poetry 가상환경에 새로운 패키지 설정 추가
poetry 가상환경에 새로운 패키지 설정을 추가할 때에는, 먼저 pyproject.toml에 해당 설정을 추가한 후, 현재 가상환경에 이를 적용하는 순서로 작업합니다. 이렇게 함으로써 현재 가상환경의 설정이 pyproject.toml과 poetry.lock에 동기화되어, 해당 파일을 pull해서 사용하는 다른 사람들도 똑같은 환경을 설정하여 사용할 수 있습니다.
1. pyproject.toml에 새로운 패키지 설정 추가
poetry add [패키지 이름]
이렇게 하면 pyproject.toml 파일에서 해당 패키지와 관련한 설정이 추가된 것을 볼 수 있습니다.
2. 현재 가상환경에 변경 사항 적용
poetry update
위에서 pyproject.toml에 적용한 변경 사항을 나의 현재 가상환경에도 적용했습니다.
03 etc
peft
- 23.07.10 기준 peft의 최신 버전은 0.4.0.dev0 입니다.
pip install -q -U git+https://github.com/huggingface/peft.git pip list | grep peft peft 0.4.0.dev0
- 하지만 아직 PyPI에는 0.3.0까지만 release가 되어있기 때문에 pip install로는 0.4.0.dev0 버전의 peft를 설치할 수 없습니다.
- 따라서 pyproject.toml 파일을 직접 수정함으로써 poetry 가상환경에 peft를 추가합니다.
[tool.poetry.dependencies] python = ">=3.9,<3.9.7 || >3.9.7,<3.13" ... peft = { git = "<https://github.com/huggingface/peft.git>" }