E&K Labs
Published in

E&K Labs

파이썬 의존성 관리자 Poetry를 사용해보자

Pycharm을 써야 하는 이유(링크)를 작성하던 중 pip 말고 다른 의존성 관리자가 있다는 것을 알게 되었습니다.

Rust 언어의 Cargo와 Node.js의 NPM과 유사한 모습을 가지고 있는 패키지 관리자입니다.

그동안 pip만을 이용하면서도 큰 문제가 발생한 적이 없어서 별도로 이런 패키지 관리자를 찾을 생각을 못 했었는데, Poetry는 파이썬 패키지를 구성하면서 NPM이나 Cargo는 가지고 있었지만 Python에서 쓰지 못해 아쉬웠던 몇몇 기능을 쓸 수 있게 해주는 흥미로운 친구였습니다.

이번 글에서는 간단하게 Poetry가 무엇인지 알아보고 사용해 보려고 합니다.

Poetry란?

pip와 같이 의존성을 관리해 주고 패키징도 해주는 의존성 관리자입니다.
또한 직접 환경 관리가 가능합니다.

poetry가 가지는 가장 큰 장점이라고 하면 pyproject.toml을 통해 패키지의 정보와 의존성을 기록할 수 있고 그 자체로 여러 환경을 관리할 수 있는 도구라는 점입니다.

물론 venv 모듈도 있지만 프로젝트 내에 생성하는 대신 별도의 캐시 디렉터리에 생성하는 것은 git에 올릴 때, gitignore에 별도로 추가할 필요도 없고 리눅스 환경에서 pyenv와 같은 별도의 도구 없이 단일 도구로 관리가 가능함을 의미합니다.

또한 간단한 명령어로 whl 파일이나 tar.gz을 생성하고 pypi에 배포 또한 지원해서 파이썬 패키지 개발에 도움을 줍니다.

Poetry 설치하기

간단한 스크립트 코드를 통해서 설치가 가능합니다.

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

윈도우즈의 경우, 파워쉘 스크립트도 제공됩니다.

(Invoke-WebRequest -Uri <https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py> -UseBasicParsing).Content | python -

다음의 명령어를 입력했을 때, 정상적으로 동작한다면 설치가 완료된 것입니다.

poetry --version# Poetry version 1.1.13

Poetry의 기본 사용법

프로젝트 생성

poetry new poetry-demo

poetry-demo는 새로 생성할 프로젝트 이름입니다.
자유롭게 변경하시면 됩니다.

기존 프로젝트 초기화

cd pre-existing-project
poetry init

프로젝트 실행

poetry run python your_script.py

특정 폴더에 있다면 상대 경로 지정도 필요합니다.
poetry run 명령어를 사용하면 캐시 디렉터리에 생성된 가상환경을 이용해서 실행됩니다.

의존성 설치

pyproject에 지정된 의존성 라이브러리를 설치할 때에는 install 명령을 사용하면 됩니다. (npm install과 같은 원리입니다.)

poetry install

의존성 업데이트

이미 등록된 의존성 목록을 업데이트할 경우 다음과 같이 할 수 있습니다.

poetry update

이때, pyproject.toml과 poetry.lock도 업데이트됩니다.

의존성 추가

npm과 다르게 install이 아닌 add로 새로운 의존성을 추가합니다.

poetry add new-library

의존성 삭제

poetry remove new-library

의존성 목록 보기

poetry show

의존성 목록 출력

기존의 requirements.txt와 같은 다른 형태의 파일로 출력해 줍니다.

poetry export -f requirements.txt > requirements.txt

환경 관리

Poetry는 가상 환경을 직접 설치하고 생성하기보다는 이미 생성된 여러 버전을 사용하여 새로운 가상환경을 생성해 주는 것에 더 가깝습니다.

아래의 명령들로 사용할 base interpreter를 설치 및 삭제할 수 있습니다.

# 이미 존재하는 파이썬 버전 알리기
poetry env use /path/to/python3
# 등록된 환경 목록
poetry env list
# 등록된 환경 삭제
poetry env remove /path/to/python3

Poetry를 이용해서 Django 환경 설정하기

실습을 위하여 일련의 과정을 통해 Django 애플리케이션을 생성하고 실행해 보겠습니다.

# 새로운 프로젝트 생성
poetry new djangoProject
cd djangoProject
# 의존성 추가
poetry add django
# django 프로젝트 생성
poetry run django-admin startproject demoproject .
# 새로운 앱 추가
poetry run python manage.py startapp poll
# 서버 실행
poetry run python manage.py runserver

Poetry 장단점

장점

  • 설치된 의존성 목록을 파악하기 좋다. (PIP의 경우, requirements.txt를 추출할 때, 내가 추가한 라이브러리 외에도 추가 종속성이 같이 포함되어서 보기도 어렵고 관리가 힘들다.)
  • Pypi 배포에 최적화됨
  • 가상환경이 프로젝트 내부에 존재하지 않음
  • PyCharm에서 지원함

단점

  • 별도의 캐시 디렉터리가 존재함 (장점이기도 하지만 단점이 될 수 있는 요소라고 생각합니다)
  • 아직은 불안정하다.
  • 환경 관리에서 알 수 없는 오류 발생 (asdf-vm을 사용하는 환경에서 새로운 환경 등록에 어려움이 있었습니다.)

마무리

아직까지 배포에서 사용해 보지 않아서 정확하게 Poetry를 이해하지 못했습니다만, pip에서 아쉽다고 느낀 점들이 해결된 만큼 기대할 만한 패키지 관리자인 것 같습니다.

--

--

우리는 아름답고 멋진 블로그 글을 작성합니다. 주 업무는 IT 에서 개발을 하며, 그 외 다양한 예술활동을 합니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store