본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

uv.lock, 범용 해석, 도구 격리

~11 min · uv, concepts, lockfile

Level 0입문자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

다음 개념들이 uv를 단순히 빠른 pip 이상으로 만들고, 여섯 도구의 역할을 대신할 수 있게 해.

uv.lock, 진짜 lockfile. uv.lock은 모든 직접·전이 의존성을 콘텐츠 해시와 함께 고정해 컴퓨터 사이에서 비트 단위 재현성을 제공해. uv sync는 잠긴 상태 그대로 설치하고 차이가 생기면 분명하게 실패해. requirements.txt가 흉내 냈지만 완전히 제공하지 못했던 기능이야.

범용 해석. uv.lock 하나에 여러 Python 버전과 macOS arm64, macOS x64, Linux, Windows 같은 여러 플랫폼의 항목이 함께 들어가. 덕분에 macOS 개발 컴퓨터, Linux CI 서버, Windows Docker 호스트가 같은 lockfile에서 각자 재현 가능한 설치를 할 수 있어.

도구 격리. uv tool install ruff는 ruff를 ~/.local/share/uv/tools/ruff/ 아래의 전용 환경에 설치하고 PATH에 명령만 노출해. 도구는 프로젝트 의존성과 충돌하지 않고 프로젝트도 도구를 깨뜨릴 수 없어. pipx의 역할이 uv에 내장된 거야.

내장 Python 관리. uv python install 3.13은 python-build-standalone 프로젝트의 이식 가능한 Python을 내려받아 등록해. 여러 버전을 함께 둘 수 있고, uv python pin 3.13.python-version을 써서 프로젝트를 해당 인터프리터에 고정해. pyenv나 시스템 Python 경로 때문에 혼란스러울 일이 줄어.

Code

uv.lock 해부·toml
# uv.lock (발췌 — 자동 생성, 절대 손 편집 안 함)
version = 1
requires-python = ">=3.11"
resolution-markers = ["sys_platform == 'darwin' and python_version >= '3.11'", ...]

[[package]]
name = "flask"
version = "3.0.3"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://...", hash = "sha256:abc..." }
wheels = [
  { url = "https://...", hash = "sha256:def..." },
]
dependencies = [
  { name = "blinker", marker = "..." },
  { name = "click", marker = "..." },
  { name = "itsdangerous", marker = "..." },
  { name = "jinja2", marker = "..." },
  { name = "werkzeug", marker = "..." },
]
uv가 관리하는 Python 확인·bash
# uv 가 어떤 Python 알아?
uv python list
# cpython-3.13.0-macos-aarch64-none    /Users/you/.local/share/uv/python/...
# cpython-3.12.4-macos-aarch64-none    /Users/you/.local/share/uv/python/...
# cpython-3.11.9-macos-aarch64-none    /Users/you/.local/share/uv/python/...
# (...그리고 install 가능하지만 안 깐 많은 항목)

# Install + 사용
uv python install 3.13
uv python pin 3.13            # .python-version 작성

# 이 프로젝트 이제 3.13 사용, 시스템 Python 무관.

External links

Exercise

uv 프로젝트에서 'uv lock' 또는 'uv sync'를 실행하고 uv.lock을 열어. 패키지 하나의 여러 플랫폼별 wheel URL, SHA256 해시, 의존성 트리를 읽어 보고 직접 작성한 requirements.txt와 비교해. 그 차이가 재현성이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.