Poetry = pip 와 virtualenv 를 동시에 사용할 수 있는 패키지 관리자 겸 의존성 관리자
파이썬 개발자인 우리는 이미 패키지 매니저인 pip 를 잘 쓰고 있고
venv 내지 conda 를 이용해 가상환경을 만들어서 이용하고 있는데
우리는 왜 poetry 를 이용하면 좋을까요?
단지 pip 와 venv 를 한번에 이용할 수 있기 때문일까요?
Poetry 의 강점 중 하나는 Dependency Resolving
이기 때문입니다.
간단히 말해 패키지를 설치할 때, 기존에 설치된 패키지의 버전을 체크하여 dependency 가 충돌하지 않게 합니다.
(물론 단점으로... dependency resolving 이 오래 걸린다고 합니다)
또한 빌드 명령 하나로 프로젝트를 쉽게 빌드하고 패키징할 수 있으며
명령어 하나로 배포하고, 프로젝트의 dependency 상태를 확인할 수 있어서 편리합니다.
저는 conda venv 만 이용하다가 최근에 처음으로 팀 협업을 하며 poetry 를 써 보았는데요,
각종 dependency 를 포함한 정보 (작성자 정보, 프로젝트 정보)를 한 눈에 확인할 수 있어서
손에 익으니 기존에 AI 연구를 할 때 사용했던 conda 보다 개발팀 협업 업무에 더 편리했습니다.
Linux, macOS, Windows 모두 설치 방법이 동일합니다. (제 환경은 macOS 입니다 🍎)
curl -sSL https://install.python-poetry.org | python3 -
macOS 의 경우 poetry 의 환경변수는 다음과 같습니다.
export PATH="$HOME/.local/bin:$PATH"
설치가 끝났으니 새 poetry 가상 환경을 만들어 볼까요?
poetry init
명령어를 이용해 'pyproject.toml' 이라는 이름의 config 파일을 만듭니다.
config 파일을 만드는 과정에서 필요한 것들을 지정해 주면 됩니다. (ex: python 버전, 작성자 및 프로젝트 정보 등)
저는 만들어진 pyproject.toml 을 조금 고쳐서 최종적으로 이렇게 이용하겠습니다.
poetry install
을 이용해 poetry.lock 파일을 생성합니다.
물론 pyproject.toml 만으로도 팀원들이 모두 같은 환경에서 개발할 수도 있고
패키지 내용을 변경한 후에 배포를 위해 가상환경 버전 업데이트를 할 수도 있습니다.
하지만 poetry.lock 파일을 이용하여 동일한 개발환경을 만드는 것을 더 권장하는데요,
제가 참고한 블로그에서는 이렇게 설명하고 있어요.
https://bskyvision.com/entry/python-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B4%80%EB%A6%AC%EC%9E%90-poetry%EC%9D%98-pyprojecttoml%EA%B3%BC-poetrylock
poetry.lock 파일이 없는 상태에서 poetry install로 pyproject.toml 파일에 명시된 패키지들을 설치하면 알아서 의존성 문제를 해결한 상태에서 가장 최신 버전들로 설치를 해줍니다.
하지만, poetry.lock 파일이 있는 상태에서 poetry install 명령을 실행하면 .lock 파일에 명시된 버전들을 설치해줍니다.
따라서 같이 작업하는 개발자들이 확실하게 같은 버전의 패키지들을 설치할 수 있게 도와주는 것이 poetry.lock 파일의 역할입니다.
poetry shell
을 이용해 완성한 가상환경 'NMT_backend' 를 실행합니다.
가상환경을 이용하는 중에 필요한 패키지가 있으면 poetry add
를 이용해 설치합니다.
(pip install 과 같은 역할을 합니다)
fastapi 패키지를 설치한 후 다시 pyproject.toml 파일을 보면 이렇게 fastapi 가 추가되어 있습니다.
[tool.poetry]
name = 'nmt-backend'
version = '0.0.1'
description = 'NMT clone coding'
authors = ['Judy Choi <https://github.com/judy-choi>']
readme = 'README.md'
[tool.poetry.dependencies]
python = '>=3.9'
fastapi = "^0.100.0"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
이후 가상환경에서 빠져나오려면 exit
을 이용하면 되고,
다시 가상환경으로 진입하고 싶을 때는 `poetry shell 을 이용하면 됩니다!
Official Document
https://python-poetry.org/
https://python-poetry.org/docs/
파이썬 의존성 관리자 Poetry 사용기
https://spoqa.github.io/2019/08/09/brand-new-python-dependency-manager-poetry.html
맥 파이썬 Poetry 설치하는법
https://miire.tistory.com/14
poetry 로 파이썬 패키지 관리하기
https://www.woolog.dev/backend/python/poetry/
Poetry를 사용하여 가상환경 만들기 (명령어 정리)
https://velog.io/@hj8853/Poetry를-사용하여-가상환경-만들기