[TIL]Poetry

여주링·2021년 1월 17일
0

TIL

목록 보기
6/13
post-thumbnail

기업협업중, 담당자분에게서 'Poerty'를 써보라는 제안을 받았다. 익숙해지면 아주 편리하다고 해서 써보았는데 개념이 어려워서 한번 정리해보았다.

1. poetry란?

Poetry는 의존성 관리 및 파이썬 내 패키징을 위한 툴이다. 프로젝트가 의존하고 있는 라이브러리들을 관리(설치, 업데이트 등)해준다.

지금까지 나도 의존성 관리자를 사용하고 있었는데! 바로 pip다! 지금까지는 pip를 통해서 관리해왔다.

2. 의존성(Dependency)

🤔 여기서 의존성은 무엇일까?
코드에서 두 모듈 간의 연결을 말한다. 하나의 모듈이 바뀌면, 거기에 의존하는 다른 모듈까지 변경이 이루어진다.

내가 일일이 모듈을 추가하고 관리하는 것이 아닌, 의존성 관리자가 내가 사용하고 있는 모듈을 일괄적으로 처리해줌으로써 API가 최신인지 확인하고 버그가 없는지 등 모든 것일 방지할 수 있게 된다.

pip이랑 뭐가 다를까

  1. Dependency Locking(의존성 잠금)
    기존에 프로젝트에서 pip를 사용할때 requirements.txt에 내가 직접 패키지를 하나하나 다 넣어서 관리했다 -> poetry는 lock 파일과 pyproject.toml(requirements.txt 같은 파일)을 자동으로 생성해주고 업데이트해준다

  2. Dependency Resolving(의존성 해결)
    패키지1, 패키지2가 있고, 패키지2는 패키지1이 2.0버전 이상을 요구한다고 가정. pip의 경우 패키지1 1.9버전으로 설치해도 전혀 문제가 발생하지 않는다 -> poetry는 버전 관련 정보를 확인하고 특정 버전 이상이 아닐 경우에 아예 설치가 되지 않는다.

  3. Virtual Environment(가상환경)
    pip는 항상 전역에 모든 패키지를 설치한다. 그래서 개별적인 관리가 불가능하다 -> poetry는 가상환경 여부를 확인하고 기존 환경, 혹은 새로 만들어 설치하는 등 자동으로 관리해준다.

3. 설치

설치는 각 운영체제별로 다르기때문에 공식문서참고 추천~!

4. 사용법

프로젝트 생성

$ poetry new 프로젝트이름

새 프로젝트이름을 넣으면 자동으로 poetry가 tests 파일을 포함한 project 디렉토리 구조를 세팅해준다.

프로젝트이름
├── pyproject.toml
├── README.rst
├── 프로젝트이름
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_프로젝트이름.py

pyproject.toml 파일

바로 의존성을 관리하는 파일이 pyproject.toml인데, 열어보면 이렇게 생겼다

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["andy.sg"]

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

여기서 [tool.poetry.dependencies] 와 [tool.poetry.dev-dependencies]에서 의존성을 관리하고 있다고 한다.

의존성 추가방법

$ poetry add django

pyproject.toml파일을 변경할 필요 없이 add command를 통해 수정이 가능하다. pip의 경우 requirements.txt는 꾸준히 업데이트를 해줘야 하는 반면, Poetry는 알아서 해주니 편하다!

#add시 출력되는 화면
Using version ^3.0.7 for django

Updating dependencies
Resolving dependencies... (7.1s)

Writing lock file


Package operations: 1 install, 9 updates, 0 removals

화면을 보면
Writing lock file 에서 생성되는 파일이 바로 poetry.lock파일인데, 내가 작성하고 있는 프로젝트의 의존성과 완전히 동일한 의존성을 가지도록 할 수 있다.

기본 메서드(기본적인것만)

🌱 init
pyproject.toml 파일을 인터렉티브 하게 만들 수 있도록 도와준다

$ poetry init

🌱 update
의존성 패키지의 버전을 업데이트하고 poetry.lock 파일을 업데이트

패키지 업데이트
$ poerty update

하나씩 지정해서 업데이트도 가능
$ poetry update requests toml

업데이트는 하지 않고 poetry.lock 만 업데이트
$ poerty update --lock

🌱 add
패키지설정을 pyproject.toml 에 추가

poetry add django

# 개발환경에서 필요한 패키지 설치
poetry add pytest factory-boy --dev

# 버전을 지정가능
poetry add django@^3.0.0
poetry add "django=3.0.0"

# 최신버전을 설치
poetry add django@latest

# 깃 저장소에 있는 패키지 설치
poetry add git+https://github.com/django/django.git

# 깃 저장소의 패키지에서 브랜치를 지정
poetry add git+https://github.com/django/django.git#stable/2.2.x

# 로컬에 디렉토리의 파일로 설치하기
poetry add ./my-package/
poetry add ./my-package/dist/my-package-0.1.0.tar.gz
poetry add ./my-package/dist/my-package-0.1.0.whl

🌱 remove
패키지 삭제

poetry remove flask

# 개발환경 패키지 삭제
poetry remove pytest
show
# 설치된 모든 패키지를 보여준다.
poetry show

# 개발환경용 제외하고 보여준다.
poetry show --no-dev

# 특정패키지를 지정하면 상세내용을 보여줍니다.
poetry show django

# 최신 버전을 보여준다.
poetry show --latest (-l)

# 업데이트를 해야하는 패키지들을 보여준다.
poetry show --outdate (-o)

# 의존성 트리를 보여준다.
poetry show --tree

🌱 config
config 커맨드로 poetry 관련 설정을 변경할 수 있습니다.

# 설정보기
poetry config --list

# 설정법
poetry config [options] [setting-key] [setting-value1] ... [setting-valueN]

5. 가상환경관리

🌱 poetry의 핵심적인 기능 중 하나가 바로 프로젝트 환경 독립이다. 만약 가상환경이 있으면 새로운 환경을 만들지 않고 기존 환경에 패키지를 설치하고, 그게 아니면 환경을 만든 뒤 패키지를 설치하게 된다.

일반적으로 아래와 같이 사용한다

$ poetry env use {파이썬경로}

(가상 환경을 만들 때 파이썬 버전은 가장 최근에 활성화된 파이썬 버전을 기준으로 한다)

단순하게 가상환경의 path만 알고 싶은 경우라면 --path 옵션을 주면 됩니다.

가상환경 리스트 보기
만들어진 가상환경의 리스트는 아래의 명령어로 확인 가능합니다.

$ poetry env list

가상환경 삭제하기
삭제는 아래의 명령어로 가능합니다.

$ poetry env remove {python경로}
profile
🌱Backend Developer👩‍💻

0개의 댓글