파이썬 파일을 리눅스에서 실행하고, 패키지를 배포해 보는 실험을 하다 pip와 pdm이란 것에 대해 알게되었습니다. 둘의 차이가 궁금해서 구글링과 GPT의 힘을 빌려 정리해보는 포스팅입니다.

파이썬으로 작업을 진행할 때, 외부 패키지를 잘 사용하는 것이 중요합니다.
파이썬은 다양한 기능들을 지원하는 패키지들이 많고, 이를 통해 원하는 비즈니스 로직에 집중할 수 있습니다.
패키지 관리를 하는 방법엔 무엇이 있는지 알아보도록 하겠습니다.


pip(Python Package Installer)

pip는 Python의 공식 패키지 관리 도구

  • Python 2.7.9 및 3.4 이상에서 기본적으로 제공
  • PyPI에서 패키지를 설치하고 관리

주요 기능

패키지 설치
pip install 명령어를 사용하여 PyPI에서 패키지를 설치합니다.

패키지 업데이트
pip install —upgrade 명령어를 사용하여 설치된 패키지를 최신 버전으로 업데이트합니다.

패키지 제거
pip uninstall 명령어를 사용하여 설치된 패키지를 제거합니다.

의존성 관리
pip freeze 명령어로 프로젝트에서 사용된 패키지들의 버전 정보를 requirements.txt 로 보내거나 해당 파일을 사용하여 의존성 설치를 합니다.

사용법

# 패키지 설치
$ pip install <PACKAGE_NAME>

# 특정 버전의 패키지 설치
$ pip install <PACKAGE_NAME>==<VERSION>

# 설치된 패키지 목록 보기
$ pip list

# 의존성 목록을 requirements.txt로 저장
$ pip freeze > requirements.txt

# requirements.txt에 있는 모든 패키지 설치
$ pip install -r requirements.txt

pip의 한계

의존성 충돌 해결

  • pip는 종속성 버전 충돌을 해결하는데 어려움을 겪을 수 있습니다.
  • 여러 패키지가 서로 다른 버전의 동일한 의존성을 요구하는 경우 충돌이 발생할 수 있습니다.

프로젝트 설정 관리 부족

  • pip는 프로젝트별 가상 환경 관리나 프로젝트 설정을 명확히 하지 않음
    이는 다른 패키지 관리 도구들이 해결하려는 문제

pdm(Python Development Master)

pdm은 pip의 기능을 확장하여 Python 패키지 관리 및 의존성 관리를 좀 더 효율적으로 해결하기위한 도구

  • pdm은 PEP 518을 준수. PEP는 Python의 코딩 규약, 공식 문서
  • pyproject.toml을 사용하여 프로젝트의 설정 및 의존성 관리를 통합적으로 처리

주요 기능

PEP 518 지원
pyproject.toml을 기반으로 의존성 및 설정 관리합니다.

빠른 의존성 해결
pip보다 더 빠르고, 효율적으로 의존성을 해결을 제공합니다.

의존성 그룹화
의존성을 default, dev, optional 그룹으로 나누어 관리합니다.
→ 개발 환경과 프로덕션 환경을 분리하는 데 유용합니다.

가상 환경 관리
프로젝트에 맞는 가상 환경을 자동으로 생성하고 관리할 수 있습니다.

단일 파일로 설정 관리
pyproject.toml 파일만 있으면 프로젝트 설정과 의존성 모두 관리 가능

사용법

# pdm 설치
$ pip install pdm

# 프로젝트 초기화 (pyproject.toml 파일 생성)
$ pdm init

# 패키지 설치
# 여러 개의 패키지를 공백을 주고 입력하면 한 번에 여러 개의 패키지 추가 가능
$ pdm add <PACKAGE_NAME>

# 개발용 의존성 추가
$ pdm add --dev <PACKAGE_NAME>

# 패키지 제거
$ pdm remove <PACKAGE_NAME>

# 의존성 설치
$ pdm install

# 의존성 목록 보기
$ pdm list

# 프로젝트의 의존성 내보내기 (requirements.txt 형식으로 보내기)
pdm export -f requirements > requirements.txt

pip와 pdm의 차이점

기능pippdm
의존성 관리requirements.txt 파일을 사용하여 의존성 관리pyproject.toml 파일을 사용하여 의존성 및 설정 관리
의존성 해결의존성 충돌을 해결하는 데 어려움이 있을 수 있음더 효율적이고 빠른 의존성 해결
의존성 그룹화의존성 그룹화 지원 Xdefault, dev, optional 그룹으로 의존성 관리 가능
설정 파일requirements.txtsetup.pypyproject.toml만 사용
PEP 518 지원지원 X지원 O
가상 환경 관리가상 환경을 수동으로 설정하고 관리자동으로 가상 환경을 생성하고 관리
패키지 설치 방법pip install <PACKAGE_NAME>pdm add <PACKAGE_NAME>
패키지 내보내기pip freeze > requirements.txtpdm export -f requirements > requirements.txt

사용

pip 사용

  • 프로젝트가 간단하고, 복잡한 의존성 해결이나 패키지 관리가 필요하지 않거나, pyproject.toml 과 같은 새로운 시스템에 익숙하지 않은 경우 사용해도 충분합니다.

pdm 사용

  • pyproject.toml 기반의 의존성 관리와 가상 환경 관리가 필요하거나, 최신 표준을 따르려는 경우 사용하기 좋습니다.
  • 빠르고 효율적인 의존성 해결, 다양한 의존성 그룹화 및 명확한 프로젝트 설정 관리를 원할 때 유용합니다.
  • 대규모 프로젝트나 개발 환경과 프로덕션 환경을 분리하여 관리하고 싶은 경우 사용하기 좋습니다.
profile
안녕하세요.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN