Published on

Poetry 사용법

파이썬은 간단한 문법과 폭넓은 범용성으로 초보 백엔드 개발자들이 많이 선택하는 첫 개발 언어이다. 파이썬의 언어적 심플함 만큼 개발 환경 설정도 손쉽게 도와주는 도구도 많은데, 필자의 과거 파이썬 개발 경험을 흐름삼아 venv와 virtualenv를 비교하고, 최근에 정착한 poetry까지 알아보자.

파이썬 개발 환경설정

2022년 7월, 본격적인 개발자로서의 삶을 시작하게된 달이다. 스타트업의 기술총괄이라는 과분한 직책에서 부터 시작한 첫 직장의 첫 프로젝트는 파이썬의 대표 풀스택 프레임워크 django를 활용하여 자사 메인 서버를 구축하기였다.

당시 사용한 환경은 virtualenv 라이브러리를 활용하여 django 서버를 구축하였고, wagtail, django-ninja등의 패키지들도 활용하여 만들어갔다. virtualenvwagtail, django, django-ninja`등의 도구들은 창업지원센터에서 지원받은 멘토님의 가이드로 기초적인 시스템을 설계할 때 활용할 수 있었다.

멘토님의 도움이 있었지만 자체적으로도 더 나은 시스템을 구축하기 위한 노력을 게을리 하지 않았다. 개인적으로 연구하여 더 다루기 편한 venv 라이브러리를 찾아 사용하였다.

🔎 virtualenvvenv의 차이 기본적으로 가상 환경을 만드는 라이브러리. 그러나, 약간의 차이가 있다.

  • venv: Python 3.3 버전 이후부터 기본 라이브러리 포함된 내장 모듈. 별도의 설치 과정이 필요없다.
  • virtualenv: Python 2 버전부터 쓰던 라이브러리. Python 3에서도 사용 가능하고 별도의 설치 과정 필요.

venv 모듈은 virtualenv의 경량화된 모듈로서, 속도와 확장성 측면에서는 virtualenv가 더 우수하다. 그러나 venv는 기본 내장 라이브러리로서, pip install을 사용하요 따로 설치할 필요없이 간단하게 사용가능하다.

그러나 가상환경을 활용한 개발에도 개인적으로 작은 불편함이 몇몇 있었다.

  • 패키지 업데이트시 requirements.txt 업데이트
  • 빌드/배포 과정 중 소요되는 시간
  • 간혹 발생하는 파이썬 버전 오류: 로컬 버전과 가상환경 버전의 차이로 패키지가 올바른 버전이 아닌 버전을 참조할 때

requirements.txt 파일만 꼼꼼하게 관리해서 계속 사용해도 전혀 문제되지는 않지만, 조금이라도 더 편하고 나은 방법을 찾던 와중에 Poetry라는 의존성 관리 툴을 찾았다.

Poetry란?

Poetry는 파이썬의 패키징과 의존성 관리를 목적으로 만들어진 툴이다. Poetrypoetry.lock이라는 lockfile을 통하여 반복 가능한 설치와 빌드, 배포를 보장한다.

Poetry의 장점은 이전 venv, virtualenv와는 다르게 사용하는 파이썬 가상환경을 작업 프로젝트 폴더 안에 위치하고, 원하는 파이썬 버전으로 프로젝트의 환경을 변경할 수 있다.

파이썬 프로젝트의 패키지와 버전까지 한꺼번에 관리하는 강력한 툴이다.

Poetry의 명령어는 아래에서 확인할 수 있다.

Poetry 명령어

# 새로운 프로젝트를 시작하는 명령어
poetry new $PROJECT
# 기존 프로젝트에 poetry를 추가하는 명령어
poetry init
# 프로젝트의 파이썬 버전을 변경하는 명령어
poetry switch $PYTHON_VERSION
# 프로젝트에 패키지를 추가하는 명령어.
# Poetry 프로젝트는 해당 명령어를 통해서만 새로운 패키지를 추가할 수 있다.
poetry add $PACKAGE
# Poetry 프로젝트 가상환경을 구동시키는 명령어
poetry shell
# 프로젝트의 의존성 패키지들을 설치하는 명령어
poetry install
# Python 프로젝트를 tar.gz 파일, 배포파일로 빌드하는 명령어
poetry build
# PyPI에 패키지를 배포할 때 사용하는 명령어
poetry publish
# 현재 의존성 패키지들을 트리형식으로 보여주는 명령어
poetry show --tree