본문 바로가기
기타

pyenv와 poetry

by 토마토베이컨수프 2022. 1. 26.

파이썬 프로젝트를 진행할 때 pyenvpoetry라는 도구를 이용하여 패키지를 관리하는 방법에 대해 알아보겠습니다.

 

poetry

어떤 파이썬 프로젝트를 만들던, 그 안에서 사용하고 있는 모듈과 패키지들이 있습니다. 그리고 해당 모듈이나 패키지들이 사용하고 있는 특정 버전도 있을 테고요. 그러나 만약 다른 사람이 이 프로젝트를 가져와 작업을 계속하고 싶다면 이 프로젝트에 설치된 패키지들의 종류가 무엇이 있는지 알기 쉽지 않을 겁니다. 만약 프로젝트 작업을 위해 설치해야 하는 패키지 이름과 버전이 명시된 문서가 있으면 어떨까요? poetry는 바로 이러한 문서를 제공하고, 문서에 제공된 내용대로 필요한 패키지들을 모두 불러와 한번에 로컬 기기에 설치하는 것을 도와줍니다.

 

pyenv

그럼 프로젝트를 위해 필요한 패키지들을 모두 받아왔다고 칩시다, 이걸 그대로 컴퓨터에 저장해야 할까요? 아닙니다, 오직 그 프로젝트만을 위한 공간을 하나 만들고 그 안에서만 패키지들을 사용해 다른 프로젝트에는 영향이 가지 않도록 해야죠. 이렇게 가상환경을 만들어 프로젝트 간의 환경을 분리해주는 것이 바로 pyenv입니다.

 

사용법

자, 그럼 이제 본격적으로 사용해봅시다. 우선 본인의 컴퓨터에 리눅스 개발 환경을 셋팅해주도록 합시다. 윈도우라면 WSL를 설치하면 됩니다. 아래 링크에 WSL 부터 pyenv 설치까지의 설명이 나와 있습니다.

https://tomatobaconsoup.tistory.com/4?category=1027012 

 

[Django] 장고 프로젝트 시작하기(Windows)

기본 환경 셋팅 윈도우를 사용한다면 리눅스 개발 환경을 세팅해 주기 위해 WSL을 설치해주어야 합니다. 저는 개인적으로 아래 링크를 따라가면 볼 수 있는 노마드 코더의 '개발자를 위한 윈도우

tomatobaconsoup.tistory.com

 

pyenv를 이용해 project-env라는 이름의 가상환경을 만들었다고 칩시다. 그럼 이제 project-env를 원하는 폴더 위치에 로컬라이즈 하고 poetry를 사용하기 위해 poetry를 설치하고 프로젝트를 시작합시다.

 

pip install poetry 

poetry new my-project

 

위 커멘드를 입력하면 어떤 폴더구조를 가진 다양한 파일들이 생성되는데, 다 필요없습니다. 저희는 이거 하나만 챙겨가면 됩니다.

 

pyproject.toml

이것이 바로 프로젝트에 필요한 패키지와 패키지의 버전을 명시해주는 문서 같은 역할을 합니다. 프로젝트와의 의존성을 조율해줄 아주 중요한 파일이죠.

 

pyproject.toml의 내부는 다음과 같습니다. 저희가 이 중에서 변경을 해줄 부분은 [tool.poetry.dependencies]인데요, 프로젝트가 의존할 패키지들을 표시해 줄 부분이죠.

 

다음과 같은 커맨드로 의존성 패키지를 추가합니다.

poetry add pandas

그럼 다음과 같이 내가 원하는 패키지가 추가되고, 자동으로 로컬에 패키지를 설치하면서 poetry.lock이라는 파일이 생겨납니다.

 

프로젝트 자체와는 의존성이 크게 없지만, 개발을 위해 필요한 기타 패키지들 (black이나 flake8 같은 포매팅 툴)은 [tool.poetry.dev-dependencies]에 추가해줍니다. --dev 옵션을 줘서 추가할 수 있습니다.

poetry add black --dev

 

만약 외부에서 프로젝트를 가져왔기 때문에 아직 로컬에 패키지들이 설치되지 않았다고 하면 다음과 같은 커맨드를 입력합니다.

poetry install

 

제거하고 싶은 패키지는 remove 키워드를 사용합니다.

poetry remove pandas

 

프로젝트를 진행하다보면, 실수로 pyproject.toml에 써져 있지 않은 패키지를 pyenv에 설치할 수 있는데요, 그럴 때는 다음과 같은 커맨드를 입력하여 pyproject.toml 에 기재되어 있는 패키지만 설치하고 나머지는 전부 지우도록 해 가상환경을 깔끔하게 청소할 수 있습니다.

poetry install --remove-untracked

 

'기타' 카테고리의 다른 글

[네트워크] HTTP  (0) 2021.11.30