Programming

pip, Poetry, uv: 파이썬 패키지 매니저 삼파전

Clyde 2026. 2. 5. 16:39

pip, Poetry, uv: 파이썬 패키지 매니저 삼파전

"requirements.txt가 늘어날수록 디버깅이 아니라 고고학 같다"는 말이 여전히 회자될 정도로 환경 관리는 끝나지 않은 과제입니다.

1. 각 도구의 핵심 철학

  • pip: 표준 패키지 설치 도구. requirements.txtvenv로 구성하는 가장 단순한 흐름입니다.
  • Poetry: pyproject.toml 기반 의존성 선언과 잠금 파일(poetry.lock)을 제공하며, 프로젝트 스캐폴딩·퍼블리시까지 관리합니다.
  • uv: Astral이 공개한 초고속 패키지 매니저로, pip와 pip-tools를 대체하면서도 설치 속도를 Rust 구현으로 크게 끌어올립니다.

2. 기능 비교 한눈에 보기

항목 pip Poetry uv
설치 속도 기본 안정적이지만 lock 검증 포함 최고 (Rust, 병렬)
잠금 파일 pip-tools로 별도 생성 필요 poetry.lock 기본 제공 uv lock · pylock.toml
가상환경 관리 python -m venv 별도 사용 poetry env use 전용 명령 내장(프로젝트별 .venv)
스크립트 실행 pip install -e .python -m ... poetry run task uv run <cmd>
퍼블리시 수동(twine) poetry publish uv publish(프리뷰) + pyx 연동

3. 2026년 최신 업데이트 스냅샷

  • pip 26.0 (2026-01-30): CLI 도움말에 컬러 출력이 기본 적용되고, --requirements-from-script로 PEP 723 스크립트 메타데이터 의존성을 바로 설치할 수 있습니다. --uploaded-prior-to, --all-releases 같은 새로운 선택 옵션과 --use-feature in-process-build-deps 실험 기능도 공개되어 빌드 의존성 설치를 같은 프로세스에서 처리할 수 있습니다. (출처: pip Changelog 26.0)
  • Poetry 2.3.0 (2026-01-18): installer.re-resolve 기본값이 false로 바뀌어 락 파일 기준으로 훨씬 직관적인 설치 결과를 얻습니다. 또 poetry-plugin-export 1.10.0과 함께 표준 pylock.toml을 생성할 수 있고, PEP 735 의존성 그룹 해시가 잠금 파일 검사에 포함되었습니다. (출처: Poetry Blog – Announcing Poetry 2.3.0)
  • uv 0.8.x (2025-08-07 보안 공지): ZIP 파서 차이로 악의적 페이로드가 숨을 수 있는 CVE-2025-54368 이슈가 발표되었고, v0.8.6 이상으로 업그레이드해야 안전합니다. 같은 시기 Astral은 GPU/사내 패키지를 다루는 pyx 레지스트리 베타와 휠 variant 지원을 공개하며 uv와의 통합을 강화했습니다. (출처: Astral Blog – uv security advisory, Introducing pyx)

4. 프로젝트별 추천 패턴

  1. 단일 스크립트/실험용 노트북: pip + venv로 충분합니다. python -m venv .venv && source .venv/bin/activatepip install만 실행하세요.
  2. 팀 프로젝트/배포용 서비스: Poetry가 의존성 잠금, 퍼블리시 메타데이터, 스크립트 관리까지 한 번에 잡아 줍니다.
  3. CI/CD 속도 중시: uv는 pip install -r requirements.txt 대비 수십 배 빠른 설치 속도와 uv pip compile 같은 명령을 제공해 파이프라인을 단축합니다.
  4. 레거시 호환: 기존 pip 생태계를 유지하면서도 빠른 설치만 도입하려면 uv pip install -r requirements.txt처럼 uv를 drop-in으로 쓰면 됩니다.

5. 실무에서 챙겨본 팁

  • 잠금 파일 커밋: Poetry/uv 모두 잠금 파일을 SCM에 포함해야 재현성이 보장됩니다.
  • 멀티 파이썬 버전: Poetry는 poetry env use <python>으로 쉽게 전환할 수 있고, uv는 uv python install로 버전을 내려받아 venv를 구성합니다.
  • 빌드 메타데이터: Poetry는 tool.poetry 섹션으로 패키지 정보를 관리하지만, uv/pyx 조합은 표준 project 섹션과 pylock.toml을 권장합니다.
  • 도구 혼용 주의: pip와 Poetry를 동시에 사용하면 잠금 파일과 실제 설치 버전이 어긋날 수 있으므로 한 가지를 선택해 일관되게 사용합니다.
  • 보안 업데이트: uv 사용자는 uv --version으로 0.8.6 이상인지 확인하고, pip는 26.0 이상에서 pip --use-feature in-process-build-deps 여부를 명확히 설정합니다.

6. 도입 체크리스트

  1. 팀 규모와 숙련도: Poetry는 러닝커브가 있지만 구조를 잡아주고, pip는 진입 장벽이 가장 낮습니다. uv는 커맨드가 익숙해지면 pip와 비슷한 감각입니다.
  2. CI 환경: 사내 미러/프록시가 있을 경우 uv가 아직 fully 지원하지 않는 기능이 있는지 확인합니다.
  3. 패키지 배포 여부: PyPI 배포까지 고려하면 Poetry의 퍼블리시 기능이 유리합니다. 단순 애플리케이션이면 uv + pip-tools도 좋은 조합입니다.
  4. 호환성: Poetry 1.8+, uv 최신 버전은 pyproject.toml의 PEP 621 스펙을 따르므로, 빌드 시스템과의 호환성을 미리 점검합니다.

7. 제안하는 사용 흐름

  1. 초기엔 pip로 빠르게 프로토타입을 만들고 requirements.in 목록을 모읍니다.
  2. 프로젝트가 커지면 Poetry 혹은 uv로 전환해 잠금 파일과 스크립트를 정리합니다.
  3. CI/CD에서는 uv를 이용해 빠른 설치를 적용하고, 배포 패키지는 Poetry로 관리하는 하이브리드도 고려할 만합니다.

결국 패키지 매니저 선택은 속도·재현성·배포 편의성의 균형입니다. pip, Poetry, uv 각각의 강점을 이해한 뒤 프로젝트 단계와 팀 문화에 맞춰 조합하면 관리 부담을 크게 줄일 수 있습니다.