Python/수업

파이썬 대패키지시대_패키지 의존성 관리

끈끈 2023. 4. 23. 22:01

 

패키지 의존성 관리

 

Module < Package < Library

  • Module : 파이썬으로 정의된 파일 / 실행 가능한 파이썬 파일
  • Package : 모듈의 집합(.모듈이름)
  • Library : 사용할만한 모듈 패키지를 만들어 놓은 것
  • (Python Standard Library(표준 라이브러리), Python Package Index(PyPI))

 

pip : Python Package Installer

 

npm, yarn : 자바스크립트의 패키지 관리자(Python의 pip와 비슷)

(package.json, package-lock.json → Node_modules)

 

pip install Package : 패키지 설치
pip install Package==1.0.4 : 특정 버전의 패키지 설치
pip search Package : 패키지 검색
pip uninstall Package : 패키지 삭제
>>> dependencies까지 삭제되지 않는다

# 기존 방식
pip freeze : 설치된 패키지 목록(pip list)
>>> pip freeze > requirements.txt
>>> pip install -r requirements.txt : 가상환경 생성/실행 후
>>> requirements-dev.txt : 개발(테스트)용으로 따로 만든다

 

의존성 관리

외부 라이브러리 관리

  • 어떤 버전 어떤 패키지 쓰였는지 / 쓰일 수 있는지

 

pip requirements 방식의 문제점

  • 이원화되지 않은 개발용/배포용 패키지
  • 의존관계 파악 어려움 : 패키지 tracking 어려움, uninstall로 dependencies까지 삭제되지 않음
  • 기존 설치 패키지와 상충되거나 설치 불가능 환경에서는 설치가 안 됨

>>> 항상 동일한 패키지 설치를 보장하기 위해 패키지 관리자와 가상환경이 동일해야 함

 

더 나은 패키지 의존성을 관리하기 위한 도구

  • pip-tools : pip-compile, pip-sync
  • 패키지 설치 기능 X (pip)
  • 가상환경 필요 (venv)
  • 파이썬 버전 분리 (pyvenv)
  • 의존성이 주석으로 나오지만 의존관계가 한 눈에 안 들어옴 (pipdeptree 의존성 그래프)
  • pipenv
  • poetry

 


 

pipenv

 

Pipfile, Pipfile.lock으로 자체적으로 생성한 가상환경에서 패키지 의존성 관리를 한다

 

패키지 설치, 가상환경, 의존성 관리를 한 번에!

 

pipenv install django
>>> 명령시 lock 파일 자동 업데이트로 똑같은 패키지가 설치되도록 보장해준다

pipenv install --dev django-debug-toolbar : 개발용 패키지 설치
>>> Locking [dev-packages] dependencies...
>>> Locking [packages] dependencies...

pipenv graph : 패키지 의존관계를 그래프로 한 눈에 볼 수 있음

pipenv run python <module> : 파이썬 실행
pipenv lock : lock 파일 생성, 업데이트
pipenv --python 3.7 : 3.7버전 파이썬을 사용하는 가상환경 생성

 

기존 문제의 해결. but, 너무 늦은 Release 주기?

 

는 2023.04.20 👇

 

https://pipenv.pypa.io/en/latest/changelog/

 

Release and Version History — pipenv 2023.4.21.dev0 documentation

Remove usage of pipfile module in favour of Plette. pipfile is not actively maintained anymore. Plette is actively maintained, and has stricter checking of the Pipefile and Pipefile.lock. As a result, Pipefile with unnamed package indecies will fail to loc

pipenv.pypa.io

 


 

poetry

 

poetry init : pyproject.toml(의존성 관리 문서) 생성(pipenv 에서 Pipfile과 비슷)

poetry install : 가상환경과 Poetry.lock 파일 생성

poetry shell : 가상환경 실행
>>> 프롬프트가 달라짐

poetry add django : 장고 설치(패키지 관리 가능)
poetry add --dev django-debug-toolbar : 개발용 패키지 설치
>>> lock 파일 업데이트

poetry search keras : 패키지 검색 가능(pip, poetry 가능 / pip-tools, pipenv 불가능) - 파이썬 대패키지시대
poetry show / show --tree : 패키지 설명과 의존성을 보여줌

# 프로젝트 필수 파일과 디렉터리 구성까지 세팅해주고 배포까지 가능
poetry new : python project kickstart 
poetry build
poetry publish

 


 

pipenv vs poetry

 

기능 비교

 

pip-tools
pipenv
poetry

 


 

https://www.youtube.com/watch?v=y2kqs4d-Wf0&t=840s 

Pycon Korea 2020

 

'Python > 수업' 카테고리의 다른 글

itertools, collections  (2) 2023.05.29
객체지향(Object Oriented Programming) 특강  (1) 2023.04.28
파이썬의 코루틴  (2) 2023.04.23
프로세스와 스레드  (2) 2023.04.16
타입별 메서드의 종류  (0) 2023.04.16