Dockerized Flask / Django 앱에서 Pip을 Uv로 전환하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Python 개발자, Docker 환경에서의 의존성 관리에 관심 있는 프로그래머
난이도: 중간 (Docker 및 Python 의존성 관리 기초 지식 필요)
핵심 요약
- uv 도구 사용 시 Python 의존성 설치 속도 약 10배 향상
- requirements.txt 대신 pyproject.toml + uv.lock 파일로 의존성 관리
- Docker 환경에서 venv 없이 비 root 사용자로 패키지 설치 가능
섹션별 세부 요약
1. uv 도입의 주요 이점
- 기존 pip 대비 의존성 설치 속도 10배 빠름
pyproject.toml
파일에서 상위 의존성만 명시하고, uv lock 파일 자동 생성- Docker 컨테이너 내부에서 venv 사용 없이 패키지 설치
uv sync
,uv add
,uv remove
명령어로 의존성 관리 간소화
2. Dockerfile 설정 및 uv 사용법
- ghcr.io/astral-sh/uv:0.7.13 이미지 사용하여 uv 바이너리 복사
- 예시:
```
COPY --from=ghcr.io/astral-sh/uv:0.7.13 /uv /uvx /usr/local/bin/
```
UV_PROJECT_ENVIRONMENT
환경변수로 venv 없이 패키지 설치 경로 직접 지정UV_COMPILE_BYTECODE=1
옵션으로 빌드 시.pyc
파일 생성
3. 의존성 관리 최적화
uv lock
명령으로 의존성 트리 정보 포함된 lock 파일 생성uv sync --locked
옵션으로 lock 파일 검증 및 설치./run deps:install
스크립트로 도커 이미지 빌드 및 lock 파일 갱신 자동화--frozen
옵션으로 lock 파일 변경 금지
4. 주의사항 및 고려 사항
- uv pip 명령어가 느린 경우 네트워크 환경 문제 가능성
.python-version
파일 생성과uv virtualenv
사용으로 pyenv 대체 가능- lock 파일이 없거나 오류 시 명시적 에러 메시지로 빌드 중단
- Rust 기반 도구 사용 시 파이썬 외 언어의 성능 우위 강조
결론
- uv 도입으로 Docker 환경에서 의존성 설치 속도 및 일관성 확보 가능
pyproject.toml
+uv.lock
파일 사용,UV_COMPILE_BYTECODE=1
옵션 적용을 권장- lock 파일 관리 및
uv sync --locked
명령어는 협업 및 배포 시 필수 - uv의 Rust 기반 구현은 성능 향상과 환경 분리 우위를 제공하지만, pyc 파일 생성 유무에 따라 서비스 시작 속도 차이 발생 가능