Python
파이썬 패키지 관리
best_spear_man
2023. 4. 26. 16:15
파이선 패키지 관리
주의: 파일 이름을 모듈과 같은 이름으로 짓지 마라. 파이선, 장고등의 키워드로 이름을 짓지 말라.
모듈vs패키지vs라이브러리
- 모듈: 파이썬 코드의 정의와 선언이 담겨있는, 즉 실행가능한 파이썬 파일.
- 패키지: 모듈들이 모여있는 namespace. (.으로 타고들어가는거)
- 라이브러리: 미리 준비된 패키지와 모듈의 모음
PIP
파이선의 패키지를 관리하는 도구
install, search, 버전지정(==), uninstallpip install SomePackage #설치 pip search SomePackage #패키지 검색 pip install SomePackage==1.0.4 #특정 버전 지정해 설치 pip uninstall SomePackage #삭제 pip freeze # 현재 설치된 패키지와 버전 목록 조회
의존성 관리(외부 라이브러리 관리)란?
- 어떤 버전/패키지가 쓰였는가
- 어떤 버전/패키지가 쓰일 수 있는가
패키지와 라이브러리는 의존을 하고 있는 다른 모듈과 패키지도 함께 설치해야한다. 이렇게 의존중인 패키지등에 문제가 생기면 전체에도 문제가 생길 수 있고 디버깅이 어려워진다.
관리 방법 1. requeirements.txt
최대한 적게 관리하는 것이 좋다. 그래서 개발용, 테스팅용으로 따로 관리하는 경우가 많다.
문제 의식
- 배포용 패키지와 개발용 패키지가 포함관게일 때 실수가 많이 발생함.(이원화가 안되는 문제, 수작업)
- 의존관계의 파악이 어렵다.(tracking) 심지어 pip uninstall은 불필요하게 남은 의존 패키지를 남긴다.
- 통일되지 않은 패키지 관리자와 가상환경(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 기능: 직접 만든 패키지 배포가능