Python

파이썬 패키지 관리

best_spear_man 2023. 4. 26. 16:15

파이선 패키지 관리

주의: 파일 이름을 모듈과 같은 이름으로 짓지 마라. 파이선, 장고등의 키워드로 이름을 짓지 말라.

모듈vs패키지vs라이브러리

  • 모듈: 파이썬 코드의 정의와 선언이 담겨있는, 즉 실행가능한 파이썬 파일.
  • 패키지: 모듈들이 모여있는 namespace. (.으로 타고들어가는거)
  • 라이브러리: 미리 준비된 패키지와 모듈의 모음

    PIP

    파이선의 패키지를 관리하는 도구
    install, search, 버전지정(==), uninstall
    pip install SomePackage    #설치
    pip search SomePackage    #패키지 검색
    pip install SomePackage==1.0.4    #특정 버전 지정해 설치
    pip uninstall SomePackage    #삭제
    pip freeze    # 현재 설치된 패키지와 버전 목록 조회

    의존성 관리(외부 라이브러리 관리)란?

  1. 어떤 버전/패키지가 쓰였는가
  2. 어떤 버전/패키지가 쓰일 수 있는가

패키지와 라이브러리는 의존을 하고 있는 다른 모듈과 패키지도 함께 설치해야한다. 이렇게 의존중인 패키지등에 문제가 생기면 전체에도 문제가 생길 수 있고 디버깅이 어려워진다.

관리 방법 1. requeirements.txt

최대한 적게 관리하는 것이 좋다. 그래서 개발용, 테스팅용으로 따로 관리하는 경우가 많다.

문제 의식

  1. 배포용 패키지와 개발용 패키지가 포함관게일 때 실수가 많이 발생함.(이원화가 안되는 문제, 수작업)
  2. 의존관계의 파악이 어렵다.(tracking) 심지어 pip uninstall은 불필요하게 남은 의존 패키지를 남긴다.
  3. 통일되지 않은 패키지 관리자와 가상환경(Vrt/venv/conda...)이 야기하는 문제들

개선1 - pipenv

  • 임의의 폴더에 pipenv install 실행 -> 가상환경 생성.
  • run pipenv shell -> 실행
  • pipenv install django
  • pipfile파일 생성: 현재 패키지 목록
  • pipfile.lock파일 생성: 언제나 똑같은 패키지가 설치되도록 보장.
  • pip install --dev django-debug-toolbar: 개발용에만.
    장점:
  • 알아서 스냅샷을 이용해 업데이트.
  • 알아서 의존성 패키지들을 게층적으로 보여준다.
  • 버전별 관리가 편리.
  • 개발용/배포용 나누어 관리하기 편리

문제의식

너무 늦은 release주기, 운영체제별 성능 이슈.

개선2 - poetry

  • 명령어만 조금 다르고 pipenv보다 좀더 개선되었다. 권장되는 의존성 관리도구이다.
  • poetry.toml과 poetry.lock을 깃헙에 올리면 팀원들이 모두 같은 패키지 설치됨이 보장됨.
  • poetry shell: 가상환경 실행
  • 설치: poetry add django
  • 개발용: peorty add --dev django
  • 검색기능: poetry search keras
  • show tree: 계층적으로 의존관계 보여줌
  • publish 기능: 직접 만든 패키지 배포가능