Skip to content

패키지 관리, 모듈 의존성

jiho lee edited this page Oct 27, 2021 · 23 revisions

현재 pipenv로 패키지 관리 중

왜 pipenv를 쓰는지?

virtualenv보다 더 간편하게 의존성을 격리시키고 파이썬 버전을 맞출 수 있다.

virtualenv는 requirements.txt와 의존성 목록이 다를 수 있다. 이에 대한 해결 방법은 pip freeze나 pigar가 있는데 둘 다 불완전하다.

  • pip freeze - 현재 pip로 설치된 모든 패키지를 표시하기 때문에 사용하지 않는 패키지나 의존성의 의존성까지도 전부 표시됨
  • pigar - 로컬 모듈을 구분하지 못하는 오류가 있고 패키지 버전이 고정되어 표시되므로 의존성 관리 없이 진행되던 프로젝트를 마이그레이션 하는 용도로만 적합

즉 이런 작업을 하더라도 virtualenv 환경에서 추후 의존성 추가는 수동으로 이루어져야 한다.

반면에 pipenv를 쓰면 의존성 추가 -> 의존성 사용의 단방향으로만 워크플로우가 이루어지기에 의존성이 명시되지 않는 문제가 없다는 장점이 있다.

requirements나 pipenv package를 버전을 명시하지 않고 관리해야 되는 이유

보안 취약점 업데이트를 대비할 수 있고, 따라서 dependabot에서 경고가 뜨지 않음

단점으로 가끔 망가진 패키지가 배포되거나 메소드가 deperecated되는 문제가 있지만 산돌이 운영에서는 장애에 대한 리스크가 비교적 작기에 트레이드오프 가능한 범위라고 생각됨.

현재 의존성 목록

네 개가 있다.

  • requests - http 통신 라이브러리
  • boto3 - AWS API 파이썬 포팅
  • bs4 - html 파싱 라이브러리
  • zappa - AWS Lambda 배포용 라이브러리

zappa를 제외한 나머지 세 개는 범용적으로 사용되는 라이브러리라서 유지보수에 문제가 없음.

zappa는 리드 개발자가 기능 개선을 포기하고 Deprecated 선언을 하였지만 해제하였음. 이슈

공식 문서에서 제안하는 github actions를 사용하는 배포 방법 sam cli를 사용하고 있다.