[Python] 언제까지 pip 쓸거니? (feat.poetry)

최근 회사에서 파이썬 패키지 관리 관련하여 "poetry"를 도입하자는 의견이 나왔었다. poetry를 처음 들은 나는 무작정 구글링을 해보았다.

What is poetry?

Poetry는 Python 프로젝트의 dependency를 선언, 관리, 설치하여 어디서나 프로젝트가 작동하도록 도와주는 툴이다. Pip와는 다르게 .toml file과 ' . lock' 파일을 생성해 dependency를 관리한다.

poetry vs pip

그렇다면 대표적인 파이썬 패키지 및 의존성 관리자 pip를 쓰지 않고 poetry를 써야하는(?) 이유는 무엇일까?

1. dependency resolving

이번 기회에 poetry를 설치하고 사용해보면서 가장 크게 와닿았던 기능이다. 예를 들어 package_a 가 있다. package_a를 설치하려면 package_b(>=0.6,<1.0) & package_c(>=1.3.0) 을 요구한다고 치자. 이때 pip는 package_b의 가장 최신버전인 1.2로 설치하여도 문제가 되지 않는다. 하지만 poetry는 package들의 버전 관련 정보를 체크하고 package들의 요구되는 버전이 아닌 경우엔 설치가 되지 않도록 한다.

2. dependency locking

pip는 프로젝트의 사용자가 requirements.txt 등을 작성하여 패키지를 관리한다. 하지만 poetry는 .lock 파일과 .toml 파일을 자동으로 생성 및 업데이트를 해준다..!

3. virtual enviorment

전역에 모든 패캐지를 설치하여 패키지의 버전끼리 꼬이는 등 관리가 힘든 pip와 달리 poetry는 가상환경 여부를 확인하고 가상환경들을 자동으로 관리해준다.

How to use?

사실 poetry 공식document에 사용법은 자세히 나와있어서 따로 설명을 작성하지 않으려고 한다. 하지만 여기서 중요한것 하나!!

poetry를 사용한다면 directory structure가 아래의 poetry standard를 따라가야한다는 점.

poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_poetry_demo.py

물론 아래와 같이 프로젝트 이름을 넣어 생성하면 자동으로 poetry가 test 파일을 포함한 프로젝트의 directory 구조를 알아서 세팅해주긴 한다 ^^

$ poetry new 프로젝트_A

또한 자동으로 생성된 .toml 파일에는 프로젝트의 메타데이터가, .lock 파일에는 설치된 패키지들의 버전과 hash가 저장되어있다.

끝마치며....

회사에서 poetry로 패키지 관리를 전반적으로 넘어가긴 하였으나 아직 불안정하여 버그도 있고 기능도 다소 부족하다는 팀원들의 의견이 있다.

그럼에도 해당 포스트를 작성한 이유는 패키지 관리는 pip로만 해야하는 줄 아는 사용자분들 (이 포스트를 작성하기 전 나..?)을 위하여다.

실제로 poetry를 설치하고 사용해보니 느낀 점은, 내가 하나하나 패키지를 업데이트하고 관리하기 보단 , 알아서 poetry가 일괄적으로 내가 사용하고 있는 패키지들의 버전을 확인하고 버전에 맞게 업데이트 및 관리를 해준다는 점에서 프로젝트의 효율적인 관리를 할 수 있게 도와준다는 점이다.

reference

https://www.focuslearning.ca/courses/poetry
https://chacha95.github.io/2021-03-27-python7/
https://spoqa.github.io/2019/08/09/brand-new-python-dependency-manager-poetry.html
https://velog.io/@hj8853/Poetry%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0
https://velog.io/@fhwmqkfl/TILPoetry

좋은 웹페이지 즐겨찾기