pip, Poetry, uv: 파이썬 패키지 매니저 삼파전
"requirements.txt가 늘어날수록 디버깅이 아니라 고고학 같다"는 말이 여전히 회자될 정도로 환경 관리는 끝나지 않은 과제입니다.

1. 각 도구의 핵심 철학
- pip: 표준 패키지 설치 도구.
requirements.txt와venv로 구성하는 가장 단순한 흐름입니다. - 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. 프로젝트별 추천 패턴
- 단일 스크립트/실험용 노트북: pip + venv로 충분합니다.
python -m venv .venv && source .venv/bin/activate후pip install만 실행하세요. - 팀 프로젝트/배포용 서비스: Poetry가 의존성 잠금, 퍼블리시 메타데이터, 스크립트 관리까지 한 번에 잡아 줍니다.
- CI/CD 속도 중시: uv는
pip install -r requirements.txt대비 수십 배 빠른 설치 속도와uv pip compile같은 명령을 제공해 파이프라인을 단축합니다. - 레거시 호환: 기존 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. 도입 체크리스트
- 팀 규모와 숙련도: Poetry는 러닝커브가 있지만 구조를 잡아주고, pip는 진입 장벽이 가장 낮습니다. uv는 커맨드가 익숙해지면 pip와 비슷한 감각입니다.
- CI 환경: 사내 미러/프록시가 있을 경우 uv가 아직 fully 지원하지 않는 기능이 있는지 확인합니다.
- 패키지 배포 여부: PyPI 배포까지 고려하면 Poetry의 퍼블리시 기능이 유리합니다. 단순 애플리케이션이면 uv + pip-tools도 좋은 조합입니다.
- 호환성: Poetry 1.8+, uv 최신 버전은
pyproject.toml의 PEP 621 스펙을 따르므로, 빌드 시스템과의 호환성을 미리 점검합니다.
7. 제안하는 사용 흐름
- 초기엔 pip로 빠르게 프로토타입을 만들고
requirements.in목록을 모읍니다. - 프로젝트가 커지면 Poetry 혹은 uv로 전환해 잠금 파일과 스크립트를 정리합니다.
- CI/CD에서는 uv를 이용해 빠른 설치를 적용하고, 배포 패키지는 Poetry로 관리하는 하이브리드도 고려할 만합니다.
결국 패키지 매니저 선택은 속도·재현성·배포 편의성의 균형입니다. pip, Poetry, uv 각각의 강점을 이해한 뒤 프로젝트 단계와 팀 문화에 맞춰 조합하면 관리 부담을 크게 줄일 수 있습니다.