220918_파이썬 패키지 관리툴 poetry

Csw·2022년 9월 18일
1

TIL

목록 보기
9/18

poetry 살펴보기

poetry란?

  • python의 패키지 관리자이자 의존성 관리자
    • 패키지 관리자 : 사용자가 설치하고자 하는 패키지를 저장소에서 찾아 다운로드 하고 설치하는 역할
    • 의존성 관리자 : 하나의 패키지가 요구하는 다른 패키지들을 올라가며 설치해야 할 패키지의 목록을 구성하고 의존성을 지켜주는 일

      의존성이란?

      • 코드에서 두 모듈간의 연결을 의미하며, 하나의 모듈이 바뀌면 의존하고 있는 다른 모듈까지 변경이 이루어져 수정이 필요하게 된다는 것을 의미
      • 의존성 관리자가 내가 사용하고 있는 모듈의 의존성을 자동으로 체크하여 일괄적으로 처리하게 된다면, API가 최신인지 확인하고 버그가 없는지 등을 사전에 예방할 수 있음
  • Github : https://github.com/python-poetry
  • 공식 홈페이지 : https://python-poetry.org/

pip에 대해

  • pip도 python의 패키지 관리자이자 의존성 관리자
  • 그런데 왜 poetry를 사용해야 할까?

pip의 문제점

1. Dependency Resolving

  • pip install 패키지명 명령어를 통해 특정 패키지를 설치하고자 할 때, 해당 패키지 설치를 위해 다른 여러가지 패키지 설치가 요구되는 경우가 있음.
  • 이때, 요구되는 패키지들 간의 버전이 상충하는 경우가 발생하며, 이런 경우에 Dependency Resolving에 실패하였다고 표현함.
    • A, B, C 세 개의 패키지가 있음.
    • A의 v2.0 설치를 위해 B의 v1.5, C의 v1.8 설치가 요구됨.
      • 이때 pip는 B의 v1.5를 설치함.
      • 그런데 C의 v1.8은 B의 v2.0 이상을 요구로 함.
      • 그러나 이미 우리는 B의 v1.5를 설치한 상황
        → Dependency Resolving에 실패함

2. Dependency Locking

  • pip에는 프로젝트가 의존하고 있는 라이브러리 관리를 위한 lock 파일이 없으며, requirements.txt를 수동으로 생성 및 업데이트해야 함.
    → 명령어 : pip freeze > requirements.txt
  • 그러나 수동으로 작업해야 하는 불편함이 있으며 requirements.txt를 작성해도 패키지 버전은 결정적이지 못하고, 실수하는 순간 개발 환경에서 잘 돌던 코드가 배포시 작동하지 않는 일을 겪을수도 있음.

3. Virtual Environment

  • pip는 항상 전역에 모든 패키지를 설치하기 때문에, X 프로젝트에서 특정 패키지의 v1.0을 설치해서 사용하고 있다가 Y 프로젝트에서 <v1.1을 설치하면 덮어 씌워져 버리는 문제가 발생.
  • virtualenv라는 가상환경 관리 패키지를 설치하여 프로젝트별로 환경을 분리할 수 있지만, pip와 별도로 관리하는 것이 불편함.

poetry의 장점

1. Dependency Resolving

  • 위에서 예시를 든 A, B, C의 패키지 사례로 설명하자면, pip로 설치 시에는 위와 같이 A v2.0, B v1.5, C v1.8 로 설치하더라도 아무런 문제가 발생하지 않음
  • 하지만 poetry는 버전 관련 정보를 확인하고 특정 버전 이상이 아닐 경우 아예 설치가 되지 않음.

2. Dependency Locking

  • poetrypoetry.lock이라는 lock파일을 생성
  • pyproject.toml(requirement.txt와 같이 설치한 패키지를 listing 해놓은 파일)을 자동 생성 및 업데이트

3. Virtual Environment

  • poetry는 가상환경 여부를 확인하고 기존 환경, 혹은 신규 생성 후 설치 등의 자동 관리를 지원
  • pipvirtualenv의 역할을 혼자서 다 함

참고 사이트

Poetry를 사용하여 가상환경 만들기
파이썬 의존성 관리자 Poetry 사용기
poetry를 사용해 패키지 관리하기 (feat. pip)
Poetry로 파이썬 의존성 관리하기
파이썬의 새로운 의존성 관리자 Poetry
파이썬 패키지 관리툴 poetry 소개
나의 파이썬 환경 구축기 1 - 써본 것들에 대한 생각

0개의 댓글