- uv로 전환 시 Python 디펜던시 설치 속도가 pip 대비 약 10배 빨라지고, 별도의 venv 없이 비루트(non-root) 사용자로도 실행 가능함
- pyproject.toml 기반으로 상위 의존성만 명시하면 uv가 자동으로 lock 파일을 관리하며, 의존성 트리와 정확한 버전 관리가 pip freeze보다 우수함
- Dockerfile에서는 uv 및 uvx 바이너리 복사, pyproject.toml/uv.lock 파일 사용, 환경 변수 설정 등 단계별 변경이 필요
- uv sync/add/remove, uv:outdated와 같은 명령어로 쉽게 의존성 추가·삭제·업데이트 및 패키지 최신 버전 확인 등 다양한 관리가 가능
- 규칙적으로 lock 파일 관리 및 의존성 업데이트가 가능해져 협업 및 배포 환경에서 일관성 확보에 장점
10배 빨라진 의존성 설치, venv 미사용, 비루트 환경 구성
- uv는 기존 pip 대비 Python 프로젝트의 의존성 설치 속도를 크게 개선하는 툴임
- uv 도입으로 Flask/Django 등 다양한 프로젝트에서 기존 pip 대비 약 10배 빠른 설치 속도를 경험할 수 있음
- 별도의 가상환경(venv) 없이도 컨테이너 내에서 비루트 사용자로 안전하게 실행할 수 있음
pyproject.toml vs requirements.txt
- 기존의 requirements.txt 대신 pyproject.toml 파일에 상위 의존성만 명시하면 uv가 자동으로 uv.lock 파일을 생성함
- pyproject.toml에
[project] dependencies항목 추가 - 기존 requirements.txt 삭제
- pyproject.toml에
- uv의 lock 파일은 pip freeze 결과와 유사하지만 정확한 의존성 트리와 버전 정보를 갖추고 있음
Dockerfile 구성 변경
- uv 및 uvx 바이너리를 컨테이너에 복사해 사용(정적 컴파일된 Rust 바이너리 사용)
- 기존 requirements*.txt 대신 pyproject.toml, uv.lock* 파일 복사
- 환경 변수 추가:
UV_COMPILE_BYTECODE=1: 빌드 단계에서 바이트코드로 미리 컴파일UV_PROJECT_ENVIRONMENT="/home/python/.local": 별도의 venv를 생성하지 않고 특정 경로에 패키지 설치
- 의존성 설치 명령어도 기존
pip3-install대신uv-install로 변경- 예:
RUN chmod 0755 bin/* && bin/uv-install
- 예:
의존성 추가, 삭제, 업데이트 등 관리
- 별도의 run 스크립트로 컨테이너 내 uv 명령어를 실행할 수 있음
./run deps:install: 이미지 빌드 후 lock 파일을 호스트로 내보내면서 설치./run deps:install --no-build: 빌드 없이 lock 파일만 갱신./run uv add mypackage --no-sync: pyproject.toml 및 lock 파일만 갱신, 실제 설치는 별도 실행./run uv remove mypackage --no-sync: 패키지 제거./run uv:outdated: 현재 의존성의 최신 버전 확인
영상 및 실습 가이드 제공
- uv 도입, pyproject.toml 작성, Dockerfile 변경, lock/sync 명령, 의존성 추가/삭제, 최신 버전 확인 등 실제 데모 및 git diff 예시 제공
- Flask, Django 두 프로젝트의 마이그레이션 diff도 참고 가능