<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=Uv%28%ED%8C%8C%EC%9D%B4%EC%8D%AC%29</id>
	<title>Uv(파이썬) - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=Uv%28%ED%8C%8C%EC%9D%B4%EC%8D%AC%29"/>
	<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=Uv(%ED%8C%8C%EC%9D%B4%EC%8D%AC)&amp;action=history"/>
	<updated>2026-07-22T15:25:31Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.gaonwiki.com/w/index.php?title=Uv(%ED%8C%8C%EC%9D%B4%EC%8D%AC)&amp;diff=108052&amp;oldid=prev</id>
		<title>Gaon12: 시작</title>
		<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=Uv(%ED%8C%8C%EC%9D%B4%EC%8D%AC)&amp;diff=108052&amp;oldid=prev"/>
		<updated>2026-03-10T06:23:24Z</updated>

		<summary type="html">&lt;p&gt;시작&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{인용|&amp;#039;&amp;#039;&amp;#039;&amp;quot;An extremely fast Python package and project manager, written in Rust.&amp;quot;&amp;#039;&amp;#039;&amp;#039;|uv 공식 슬로건}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;uv&amp;#039;&amp;#039;&amp;#039;(유-브이)는 [[Rust]] 언어로 작성된 초고속 [[파이썬]](Python) 패키지 및 프로젝트 관리 도구이다. [[Astral]] 팀이 개발했으며, 기존의 [[pip]], [[virtualenv]], [[pip-tools]], [[pipx]], [[Poetry]], [[pyenv]], [[Rye]], [[twine]] 등 여러 도구들의 기능을 단 하나의 바이너리로 통합한 것이 특징이다. [[pip]]보다 &amp;#039;&amp;#039;&amp;#039;10~100배&amp;#039;&amp;#039;&amp;#039; 빠른 속도를 자랑하며, 2024년 2월에 처음 공개된 이래 파이썬 생태계에서 폭발적인 인기를 끌고 있다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
&lt;br /&gt;
파이썬 개발자라면 누구나 한번쯤 겪어봤을 것이다. 새 프로젝트를 시작하면서 [[pip]]으로 패키지를 설치하는데 몇 분씩 걸리거나, 가상환경 만드는 데만 20~40초가 소요되거나, 의존성 충돌 때문에 밤새 씨름한 경험. uv는 이 모든 문제를 &amp;#039;&amp;#039;&amp;#039;한 방에&amp;#039;&amp;#039;&amp;#039; 해결하겠다는 야심찬 목표로 등장한 도구다.&lt;br /&gt;
&lt;br /&gt;
[[Astral]]은 파이썬 생태계에서 이미 초고속 린터·포매터인 &amp;#039;&amp;#039;&amp;#039;[[Ruff]]&amp;#039;&amp;#039;&amp;#039;로 이름을 알린 팀이다.[* Ruff는 [[Flake8]]이나 [[Black]]보다 10~100배 빠른 속도로 유명하다.] 이 팀이 패키지 관리 분야에도 같은 철학을 적용해 만든 것이 바로 uv다.&lt;br /&gt;
&lt;br /&gt;
uv의 핵심 철학은 간단하다:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;빠름&amp;#039;&amp;#039;&amp;#039; — 기다리는 시간을 최소화해 개발 흐름을 끊지 않는다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;통합&amp;#039;&amp;#039;&amp;#039; — 여러 도구를 따로따로 관리하지 않아도 된다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;호환성&amp;#039;&amp;#039;&amp;#039; — 기존 pip 워크플로우를 그대로 유지하면서 마이그레이션한다.&lt;br /&gt;
&lt;br /&gt;
== 역사 ==&lt;br /&gt;
&lt;br /&gt;
=== 탄생 배경 ===&lt;br /&gt;
&lt;br /&gt;
파이썬의 패키지 관리 생태계는 오랫동안 파편화 문제를 안고 있었다. 패키지를 설치할 때는 [[pip]], 가상환경을 만들 때는 [[venv]] 또는 [[virtualenv]], 의존성을 고정할 때는 [[pip-tools]], 파이썬 버전 관리는 [[pyenv]], CLI 도구 격리는 [[pipx]]... 이런 식으로 각각 다른 도구를 조합해야 했고, 이를 배우고 관리하는 비용이 만만찮았다.&lt;br /&gt;
&lt;br /&gt;
또한 pip 자체의 속도 문제도 심각했다. pip은 [[파이썬]]으로 작성되어 있어 의존성 해결 자체에 파이썬 인터프리터가 필요하고, 패키지 메타데이터를 가져오기 위해 전체 wheel 파일을 다운로드하는 비효율도 존재했다.&lt;br /&gt;
&lt;br /&gt;
=== 출시 및 성장 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 시기 !! 내용&lt;br /&gt;
|-&lt;br /&gt;
| 2024년 2월 || uv 최초 공개. pip/pip-tools의 드롭인 대체제로 출발&lt;br /&gt;
|-&lt;br /&gt;
| 2024년 중반 || 프로젝트 관리, Python 설치, 스크립트 실행 등 기능 대폭 확장&lt;br /&gt;
|-&lt;br /&gt;
| 2024년 하반기 || Poetry, Rye의 기능을 흡수하는 통합 도구로 발전. Rye 프로젝트 인수&lt;br /&gt;
|-&lt;br /&gt;
| 2025년 | | PyCharm 등 주요 IDE에서 공식 지원 시작. 프로덕션 환경에서의 채택 급증&lt;br /&gt;
|-&lt;br /&gt;
| 2026년 현재 || 파이썬 생태계의 사실상 표준 패키지 관리 도구로 자리매김 중&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rye 인수 ===&lt;br /&gt;
&lt;br /&gt;
흥미로운 에피소드로, [[Flask]]의 창시자인 [[Armin Ronacher]]가 개인 프로젝트로 만든 &amp;#039;&amp;#039;&amp;#039;Rye&amp;#039;&amp;#039;&amp;#039;라는 파이썬 패키지 관리 도구가 있었다. Astral 팀이 Ronacher와 협력해 Rye를 인수하고, uv를 &amp;quot;파이썬의 [[Cargo]]&amp;quot;로 발전시키기로 합의했다. Rye는 현재 uv 기반으로 마이그레이션되고 있다.&lt;br /&gt;
&lt;br /&gt;
== 설치 방법 ==&lt;br /&gt;
&lt;br /&gt;
=== 운영체제별 설치 ===&lt;br /&gt;
&lt;br /&gt;
==== macOS / Linux ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 공식 설치 스크립트 사용 (권장)&lt;br /&gt;
curl -LsSf https://astral.sh/uv/install.sh | sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Windows (PowerShell) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# PowerShell에서 실행&lt;br /&gt;
powershell -ExecutionPolicy ByPass -c &amp;quot;irm https://astral.sh/uv/install.ps1 | iex&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pip으로 설치 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install uv&lt;br /&gt;
# 또는 pipx를 사용한 격리 설치 (권장)&lt;br /&gt;
pipx install uv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Homebrew (macOS) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install uv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 설치 확인 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv --version&lt;br /&gt;
# 예시 출력: uv 0.x.x (...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 셸 자동완성 설정 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# bash&lt;br /&gt;
echo &amp;#039;eval &amp;quot;$(uv generate-shell-completion bash)&amp;quot;&amp;#039; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
# zsh&lt;br /&gt;
echo &amp;#039;eval &amp;quot;$(uv generate-shell-completion zsh)&amp;quot;&amp;#039; &amp;gt;&amp;gt; ~/.zshrc&lt;br /&gt;
&lt;br /&gt;
# fish&lt;br /&gt;
echo &amp;#039;uv generate-shell-completion fish | source&amp;#039; &amp;gt;&amp;gt; ~/.config/fish/config.fish&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 자체 업데이트 ===&lt;br /&gt;
&lt;br /&gt;
공식 설치 스크립트로 설치한 경우 uv 스스로 업데이트가 가능하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv self update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 핵심 기능 ==&lt;br /&gt;
&lt;br /&gt;
uv는 단순한 패키지 설치 도구를 넘어, 파이썬 개발 환경 전체를 관리하는 올인원 도구다. 아래에 각 기능을 상세히 설명한다.&lt;br /&gt;
&lt;br /&gt;
=== 패키지 설치 (pip 인터페이스) ===&lt;br /&gt;
&lt;br /&gt;
기존 pip 명령어에 `uv` 접두사를 붙이는 것만으로 사용 가능하다. 기존 워크플로우를 거의 바꾸지 않아도 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 패키지 설치&lt;br /&gt;
uv pip install requests&lt;br /&gt;
&lt;br /&gt;
# requirements.txt로 설치&lt;br /&gt;
uv pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# 개발 의존성 포함 설치&lt;br /&gt;
uv pip install -e &amp;quot;.[dev]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 특정 인덱스에서 설치 (예: PyTorch CUDA)&lt;br /&gt;
uv pip install torch --index-url https://download.pytorch.org/whl/cu121&lt;br /&gt;
&lt;br /&gt;
# 패키지 목록 확인&lt;br /&gt;
uv pip list&lt;br /&gt;
&lt;br /&gt;
# 패키지 제거&lt;br /&gt;
uv pip uninstall requests&lt;br /&gt;
&lt;br /&gt;
# 설치된 패키지를 requirements.txt 형식으로 출력&lt;br /&gt;
uv pip freeze &amp;gt; requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pip compile (pip-tools 대체) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# requirements.in → requirements.txt (버전 고정)&lt;br /&gt;
uv pip compile requirements.in -o requirements.txt&lt;br /&gt;
&lt;br /&gt;
# 플랫폼 독립적 해결 (크로스 플랫폼 lockfile)&lt;br /&gt;
uv pip compile requirements.in --universal -o requirements.txt&lt;br /&gt;
&lt;br /&gt;
# 특정 파이썬 버전 타겟&lt;br /&gt;
uv pip compile requirements.in --python-version 3.11 -o requirements.txt&lt;br /&gt;
&lt;br /&gt;
# requirements.txt 동기화 (불필요한 패키지 자동 제거)&lt;br /&gt;
uv pip sync requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 가상환경 관리 ===&lt;br /&gt;
&lt;br /&gt;
pip이 20~40초 걸리던 가상환경 생성을 uv는 &amp;#039;&amp;#039;&amp;#039;약 0.5초&amp;#039;&amp;#039;&amp;#039; 만에 처리한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 기본 가상환경 생성&lt;br /&gt;
uv venv&lt;br /&gt;
&lt;br /&gt;
# 특정 파이썬 버전으로 가상환경 생성&lt;br /&gt;
uv venv --python 3.12&lt;br /&gt;
&lt;br /&gt;
# 특정 경로에 가상환경 생성&lt;br /&gt;
uv venv myenv&lt;br /&gt;
&lt;br /&gt;
# 가상환경 활성화 (기존 방식과 동일)&lt;br /&gt;
source .venv/bin/activate        # Linux/macOS&lt;br /&gt;
.venv\Scripts\activate           # Windows&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[* uv run 명령어를 사용하면 수동으로 가상환경을 활성화할 필요조차 없다. uv가 알아서 관리해준다.]&lt;br /&gt;
&lt;br /&gt;
=== 프로젝트 관리 (Poetry 대체) ===&lt;br /&gt;
&lt;br /&gt;
Poetry와 유사한 방식으로 프로젝트 전체의 생명주기를 관리한다.&lt;br /&gt;
&lt;br /&gt;
==== 프로젝트 초기화 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 새 프로젝트 생성&lt;br /&gt;
uv init my-project&lt;br /&gt;
cd my-project&lt;br /&gt;
&lt;br /&gt;
# 생성되는 파일 구조:&lt;br /&gt;
# my-project/&lt;br /&gt;
# ├── .git/&lt;br /&gt;
# ├── .venv/&lt;br /&gt;
# ├── .python-version&lt;br /&gt;
# ├── pyproject.toml&lt;br /&gt;
# ├── README.md&lt;br /&gt;
# └── src/&lt;br /&gt;
#     └── my_project/&lt;br /&gt;
#         └── __init__.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 의존성 추가/제거 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 패키지 추가 (pyproject.toml에 자동 기록 + 설치)&lt;br /&gt;
uv add requests&lt;br /&gt;
uv add &amp;quot;fastapi&amp;gt;=0.100&amp;quot;&lt;br /&gt;
uv add &amp;quot;numpy&amp;gt;=1.24,&amp;lt;2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 개발 의존성 추가&lt;br /&gt;
uv add --dev pytest ruff mypy&lt;br /&gt;
&lt;br /&gt;
# 특정 그룹에 추가&lt;br /&gt;
uv add --group lint ruff&lt;br /&gt;
&lt;br /&gt;
# 패키지 제거&lt;br /&gt;
uv remove requests&lt;br /&gt;
&lt;br /&gt;
# 의존성 업그레이드&lt;br /&gt;
uv add requests --upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Lock 파일 관리 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# uv.lock 생성/업데이트&lt;br /&gt;
uv lock&lt;br /&gt;
&lt;br /&gt;
# lock 파일 기반으로 환경 동기화&lt;br /&gt;
uv sync&lt;br /&gt;
&lt;br /&gt;
# 개발 의존성 포함 동기화&lt;br /&gt;
uv sync --all-extras&lt;br /&gt;
&lt;br /&gt;
# 특정 그룹만 동기화&lt;br /&gt;
uv sync --group lint&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 프로젝트 실행 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 가상환경 활성화 없이 바로 실행 (uv가 자동으로 처리)&lt;br /&gt;
uv run python main.py&lt;br /&gt;
uv run python -m pytest&lt;br /&gt;
uv run ruff check .&lt;br /&gt;
&lt;br /&gt;
# 환경변수와 함께 실행&lt;br /&gt;
uv run --env-file .env python main.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`uv run`의 가장 큰 장점은 &amp;#039;&amp;#039;&amp;#039;가상환경을 수동으로 활성화하지 않아도 된다&amp;#039;&amp;#039;&amp;#039;는 점이다. uv가 알아서 `.venv`를 찾고 올바른 환경에서 실행시켜 준다.&lt;br /&gt;
&lt;br /&gt;
=== 파이썬 버전 관리 (pyenv 대체) ===&lt;br /&gt;
&lt;br /&gt;
별도의 pyenv 없이 uv 하나로 여러 파이썬 버전을 관리할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 파이썬 설치&lt;br /&gt;
uv python install 3.12&lt;br /&gt;
uv python install 3.11 3.12 3.13   # 여러 버전 동시 설치&lt;br /&gt;
&lt;br /&gt;
# 설치된 파이썬 목록 확인&lt;br /&gt;
uv python list&lt;br /&gt;
&lt;br /&gt;
# 사용 가능한 파이썬 버전 조회&lt;br /&gt;
uv python list --all-versions&lt;br /&gt;
&lt;br /&gt;
# 특정 프로젝트에 파이썬 버전 고정&lt;br /&gt;
uv python pin 3.12   # .python-version 파일 생성&lt;br /&gt;
&lt;br /&gt;
# PyPy 설치 및 사용&lt;br /&gt;
uv python install pypy@3.10&lt;br /&gt;
uv run --python pypy@3.10 python --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pyenv와의 차이점은, pyenv는 시스템 전역의 파이썬 버전을 바꾸는 방식이지만, uv는 &amp;#039;&amp;#039;&amp;#039;프로젝트별로&amp;#039;&amp;#039;&amp;#039; 파이썬 버전을 관리한다는 점이다. 프로젝트마다 다른 버전을 쓰는 게 훨씬 자연스럽다.&lt;br /&gt;
&lt;br /&gt;
=== 도구 관리 (pipx 대체) ===&lt;br /&gt;
&lt;br /&gt;
==== uvx - 일회성 도구 실행 ====&lt;br /&gt;
&lt;br /&gt;
설치 없이 파이썬 패키지가 제공하는 CLI 도구를 즉시 실행할 수 있다. npm의 `npx`와 유사한 개념이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 임시 환경에서 바로 실행 (설치 불필요)&lt;br /&gt;
uvx ruff check .&lt;br /&gt;
uvx black .&lt;br /&gt;
uvx httpie https://httpbin.org/get&lt;br /&gt;
uvx cowsay &amp;quot;Hello, uv!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 특정 버전으로 실행&lt;br /&gt;
uvx ruff@0.3.0 check .&lt;br /&gt;
&lt;br /&gt;
# uv tool run도 같은 명령&lt;br /&gt;
uv tool run ruff check .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 도구 영구 설치 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 도구를 시스템에 영구 설치 (격리 환경에서)&lt;br /&gt;
uv tool install ruff&lt;br /&gt;
uv tool install black&lt;br /&gt;
uv tool install httpie&lt;br /&gt;
&lt;br /&gt;
# 설치된 도구 목록&lt;br /&gt;
uv tool list&lt;br /&gt;
&lt;br /&gt;
# 도구 업그레이드&lt;br /&gt;
uv tool upgrade ruff&lt;br /&gt;
&lt;br /&gt;
# 도구 제거&lt;br /&gt;
uv tool uninstall ruff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 단일 파일 스크립트 실행 ===&lt;br /&gt;
&lt;br /&gt;
이것이 uv의 매우 독특하고 혁신적인 기능 중 하나다. [[PEP 723]]에 기반한 &amp;#039;&amp;#039;&amp;#039;인라인 의존성 메타데이터&amp;#039;&amp;#039;&amp;#039;를 스크립트 파일 안에 직접 선언할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# example.py&lt;br /&gt;
# /// script&lt;br /&gt;
# requires-python = &amp;quot;&amp;gt;=3.12&amp;quot;&lt;br /&gt;
# dependencies = [&lt;br /&gt;
#   &amp;quot;requests&amp;quot;,&lt;br /&gt;
#   &amp;quot;beautifulsoup4&amp;quot;,&lt;br /&gt;
# ]&lt;br /&gt;
# ///&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
resp = requests.get(&amp;quot;https://example.com&amp;quot;)&lt;br /&gt;
soup = BeautifulSoup(resp.text, &amp;quot;html.parser&amp;quot;)&lt;br /&gt;
print(soup.title.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 별도의 venv나 pip install 없이 그냥 실행&lt;br /&gt;
uv run example.py&lt;br /&gt;
&lt;br /&gt;
# 출력 예시:&lt;br /&gt;
# Reading inline script metadata from: example.py&lt;br /&gt;
# Installed 5 packages in 12ms&lt;br /&gt;
# Example Domain&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 기능의 의의는 엄청나다. 파이썬 스크립트 하나를 공유할 때 requirements.txt나 별도의 설치 안내 없이 &amp;#039;&amp;#039;&amp;#039;파일 하나만으로 완전한 재현성&amp;#039;&amp;#039;&amp;#039;을 확보할 수 있다. uv만 설치되어 있으면 누구든 즉시 실행 가능하다.&lt;br /&gt;
&lt;br /&gt;
=== 빌드 및 배포 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 패키지 빌드 (wheel, sdist 생성)&lt;br /&gt;
uv build&lt;br /&gt;
&lt;br /&gt;
# PyPI에 배포&lt;br /&gt;
uv publish&lt;br /&gt;
&lt;br /&gt;
# Test PyPI에 배포&lt;br /&gt;
uv publish --publish-url https://test.pypi.org/legacy/&lt;br /&gt;
&lt;br /&gt;
# 토큰 인증&lt;br /&gt;
uv publish --token $PYPI_TOKEN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.8. 워크스페이스 (모노레포 지원) ===&lt;br /&gt;
&lt;br /&gt;
[[Cargo]]의 워크스페이스 개념을 차용한 기능으로, 여러 파이썬 패키지를 하나의 저장소에서 관리할 때 유용하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
# 루트 pyproject.toml&lt;br /&gt;
[tool.uv.workspace]&lt;br /&gt;
members = [&lt;br /&gt;
    &amp;quot;packages/core&amp;quot;,&lt;br /&gt;
    &amp;quot;packages/api&amp;quot;,&lt;br /&gt;
    &amp;quot;packages/cli&amp;quot;,&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 워크스페이스 전체 sync&lt;br /&gt;
uv sync --all-packages&lt;br /&gt;
&lt;br /&gt;
# 특정 패키지만 실행&lt;br /&gt;
uv run --package api python -m uvicorn app:app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 속도의 비밀 ==&lt;br /&gt;
&lt;br /&gt;
uv가 pip보다 10~100배 빠른 이유는 단순히 Rust로 만들어졌기 때문만이 아니다. 여러 영리한 엔지니어링 결정들이 복합적으로 작용한 결과다.&lt;br /&gt;
&lt;br /&gt;
=== Rust 기반의 구현 ===&lt;br /&gt;
&lt;br /&gt;
pip은 [[파이썬]]으로 작성되어 있다. 파이썬은 고수준 언어로 편리하지만, 파일 I/O나 복잡한 연산에서 오버헤드가 크다. 특히 파이썬의 &amp;#039;&amp;#039;&amp;#039;GIL(Global Interpreter Lock)&amp;#039;&amp;#039;&amp;#039; 때문에 진정한 멀티스레드 병렬 처리가 불가능하다.&lt;br /&gt;
&lt;br /&gt;
반면 uv는 [[Rust]]로 작성되어 있다. Rust는:&lt;br /&gt;
* GIL 없이 네이티브 멀티스레드 지원&lt;br /&gt;
* 가비지 컬렉터 없는 메모리 관리로 런타임 오버헤드 최소화&lt;br /&gt;
* 단일 정적 바이너리 배포 → 인터프리터 시작 비용 없음&lt;br /&gt;
* `rkyv` 라이브러리를 이용한 제로카피 역직렬화&lt;br /&gt;
&lt;br /&gt;
=== PubGrub 의존성 해결 알고리즘 ===&lt;br /&gt;
&lt;br /&gt;
pip의 기존 의존성 해결 알고리즘은 버전을 하나씩 시도하고 실패하면 되돌아가는 단순한 백트래킹 방식이었다. 복잡한 의존성 트리에서 수분이 걸리기도 했다.&lt;br /&gt;
&lt;br /&gt;
uv는 &amp;#039;&amp;#039;&amp;#039;PubGrub&amp;#039;&amp;#039;&amp;#039; 알고리즘을 사용한다. PubGrub은 원래 Dart의 pub 패키지 매니저에서 개발된 알고리즘으로, SAT 솔버의 &amp;#039;&amp;#039;&amp;#039;CDCL(Conflict-Driven Clause Learning)&amp;#039;&amp;#039;&amp;#039; 기법을 적용했다.&lt;br /&gt;
&lt;br /&gt;
작동 방식을 쉽게 설명하면:&lt;br /&gt;
# 의존성 요구사항들을 논리 제약 조건으로 모델링한다&lt;br /&gt;
# 충돌이 발생하면 단순히 되돌아가는 게 아니라 &amp;#039;&amp;#039;&amp;#039;왜 충돌이 발생했는지 학습&amp;#039;&amp;#039;&amp;#039;한다&lt;br /&gt;
# 이 학습된 정보를 바탕으로 비슷한 실패 조합을 수백만 가지씩 한번에 건너뛴다&lt;br /&gt;
&lt;br /&gt;
덕분에 복잡한 의존성 그래프에서도 매우 빠르게 해결책을 찾고, 실패 시에도 &amp;#039;&amp;#039;&amp;#039;명확한 에러 메시지&amp;#039;&amp;#039;&amp;#039;를 제공한다.&lt;br /&gt;
&lt;br /&gt;
&amp;gt; 예: `&amp;quot;Failed to resolve: package-a requires requests&amp;lt;=2.28 but package-b requires requests&amp;gt;=2.29&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
=== 글로벌 캐시 + 하드링크 ===&lt;br /&gt;
&lt;br /&gt;
pip은 패키지를 설치할 때마다 각 가상환경의 `site-packages` 폴더에 파일을 &amp;#039;&amp;#039;&amp;#039;복사&amp;#039;&amp;#039;&amp;#039;한다. 10개의 프로젝트에서 numpy를 쓴다면 numpy 파일이 10벌 복사된다. 낭비다.&lt;br /&gt;
&lt;br /&gt;
uv는 다르다:&lt;br /&gt;
# 패키지를 처음 다운로드하면 &amp;#039;&amp;#039;&amp;#039;글로벌 캐시&amp;#039;&amp;#039;&amp;#039; (`~/.cache/uv/wheels/`)에 저장한다&lt;br /&gt;
# 이후 설치할 때는 파일을 복사하는 대신 &amp;#039;&amp;#039;&amp;#039;하드링크(hardlink)&amp;#039;&amp;#039;&amp;#039; 또는 &amp;#039;&amp;#039;&amp;#039;Copy-on-Write(CoW)&amp;#039;&amp;#039;&amp;#039;를 사용해 가상환경이 캐시를 가리키도록 한다&lt;br /&gt;
&lt;br /&gt;
도서관에 비유하면: pip은 책을 빌릴 때마다 복사본을 만드는 방식이고, uv는 도서관에 원본을 두고 위치 표지만 나눠주는 방식이다.&lt;br /&gt;
&lt;br /&gt;
이 덕분에:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;워크캐시 상태에서 가상환경 생성이 밀리초 수준&amp;#039;&amp;#039;&amp;#039;으로 빠르다&lt;br /&gt;
* 동일 패키지를 여러 프로젝트에서 써도 디스크 공간을 낭비하지 않는다&lt;br /&gt;
&lt;br /&gt;
=== 병렬 다운로드 및 설치 ===&lt;br /&gt;
&lt;br /&gt;
pip은 패키지를 순차적으로 다운로드하고 설치하는 경향이 있다. uv는 Rust의 멀티스레드를 활용해 패키지들을 &amp;#039;&amp;#039;&amp;#039;동시에&amp;#039;&amp;#039;&amp;#039; 다운로드하고 설치한다.&lt;br /&gt;
&lt;br /&gt;
여러 개의 무거운 패키지 (예: torch + numpy + pandas)를 한번에 추가할 때 차이가 확연히 드러난다.&lt;br /&gt;
&lt;br /&gt;
=== HTTP Range Request로 메타데이터만 가져오기 ===&lt;br /&gt;
&lt;br /&gt;
pip은 패키지의 메타데이터를 얻기 위해 wheel 파일 전체를 다운로드하는 경우가 있다. PyTorch 같은 수 GB짜리 패키지도 마찬가지다.&lt;br /&gt;
&lt;br /&gt;
uv는 HTTP의 `Range` 헤더를 사용해 wheel 파일의 앞부분 메타데이터(수 KB)만 선택적으로 다운로드한다. 나머지 99%는 필요할 때만 받는다.&lt;br /&gt;
&lt;br /&gt;
=== Python 없이 동작 ===&lt;br /&gt;
&lt;br /&gt;
pip은 모든 작업에 파이썬 인터프리터가 필요하고, 레거시 패키지의 메타데이터를 얻으려면 빌드 백엔드를 서브프로세스로 실행한다.&lt;br /&gt;
&lt;br /&gt;
uv는 TOML과 wheel 메타데이터를 Rust 코드로 네이티브 파싱하며, `setup.py`만 가진 레거시 패키지를 만날 때만 파이썬을 사용한다.&lt;br /&gt;
&lt;br /&gt;
=== 성능 벤치마크 ===&lt;br /&gt;
&lt;br /&gt;
공식 벤치마크 기준 (Trio 패키지의 의존성 설치):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 상태 !! pip !! uv !! 속도 차이&lt;br /&gt;
|-&lt;br /&gt;
| 콜드 캐시 (최초 설치) || ~수십 초 || 수 초 || 8~10배 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 워크 캐시 (재설치) || 수십 초 || 수백 ms || 80~115배 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 가상환경 생성 || 20~40초 || ~0.5초 || 약 60배 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 의존성 해결 (복잡한 그래프) || 수분 가능 || 수 ms~초 || 수십~수백배&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[* 벤치마크 결과는 환경, 네트워크 상태, 패키지 복잡도에 따라 다를 수 있다.]&lt;br /&gt;
&lt;br /&gt;
== 기존 도구와의 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== uv vs pip ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 항목 !! pip !! uv&lt;br /&gt;
|-&lt;br /&gt;
| 속도 || 느림 || 10~100배 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 가상환경 관리 || 별도 venv/virtualenv 필요 || 통합&lt;br /&gt;
|-&lt;br /&gt;
| 의존성 잠금(lockfile) || 별도 pip-tools 필요 || 내장 (uv.lock)&lt;br /&gt;
|-&lt;br /&gt;
| 파이썬 버전 관리 || 별도 pyenv 필요 || 내장&lt;br /&gt;
|-&lt;br /&gt;
| 메모리 사용량 || 상대적으로 많음 || 적음&lt;br /&gt;
|-&lt;br /&gt;
| 에러 메시지 || 불명확한 경우 많음 || 명확한 충돌 원인 표시&lt;br /&gt;
|-&lt;br /&gt;
| 기존 호환성 || 기준 || requirements.txt, PyPI 완전 호환&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== uv vs Poetry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 항목 !! Poetry !! uv&lt;br /&gt;
|-&lt;br /&gt;
| 속도 || 느림 || 압도적으로 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 기능 완성도 || 성숙함 || 빠르게 따라잡는 중&lt;br /&gt;
|-&lt;br /&gt;
| 러닝커브 || 중간 || pip에 익숙하면 낮음&lt;br /&gt;
|-&lt;br /&gt;
| 프로젝트 관리 || 강력 || 강력 (점점 강화)&lt;br /&gt;
|-&lt;br /&gt;
| 패키지 배포 || 강력 (semantic versioning 등) || 지원&lt;br /&gt;
|-&lt;br /&gt;
| 표준 준수 (PEP 621 등) || 일부 독자 포맷 || 표준 우선&lt;br /&gt;
|-&lt;br /&gt;
| 추천 상황 || 장기 라이브러리 개발 || 대부분의 신규 프로젝트&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== uv vs Conda ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 항목 !! Conda !! uv&lt;br /&gt;
|-&lt;br /&gt;
| 파이썬 외 시스템 패키지 || 지원 || 미지원&lt;br /&gt;
|-&lt;br /&gt;
| 데이터 과학 생태계 || 강력 (Anaconda 채널) || PyPI 기반&lt;br /&gt;
|-&lt;br /&gt;
| 속도 || 느림 || 압도적으로 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 용량 || 무거움 (Anaconda 수 GB) || 단일 바이너리 (~10MB)&lt;br /&gt;
|-&lt;br /&gt;
| GPU 드라이버 관리 || 지원 || 미지원 (pip 인터페이스로 우회 가능)&lt;br /&gt;
|-&lt;br /&gt;
| 크로스 플랫폼 || 강력 || 강력&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[* GPU/CUDA 환경에서는 `uv pip install torch --index-url https://download.pytorch.org/whl/cu121` 형태로 사용 가능하다.]&lt;br /&gt;
&lt;br /&gt;
=== uv vs pipx ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 항목 !! pipx !! uv (uvx)&lt;br /&gt;
|-&lt;br /&gt;
| CLI 도구 격리 실행 || 지원 || 지원 (uvx)&lt;br /&gt;
|-&lt;br /&gt;
| 속도 || 느림 || 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 일회성 실행 || npx 스타일 미지원 || uvx로 지원&lt;br /&gt;
|-&lt;br /&gt;
| 통합 도구 여부 || 단독 도구 || uv의 일부 기능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== pyproject.toml 구성 ==&lt;br /&gt;
&lt;br /&gt;
uv 프로젝트의 핵심 설정 파일인 `pyproject.toml`의 구조를 설명한다.&lt;br /&gt;
&lt;br /&gt;
=== 기본 구조 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[project]&lt;br /&gt;
name = &amp;quot;my-project&amp;quot;&lt;br /&gt;
version = &amp;quot;0.1.0&amp;quot;&lt;br /&gt;
description = &amp;quot;My awesome project&amp;quot;&lt;br /&gt;
readme = &amp;quot;README.md&amp;quot;&lt;br /&gt;
requires-python = &amp;quot;&amp;gt;=3.12&amp;quot;&lt;br /&gt;
license = { file = &amp;quot;LICENSE&amp;quot; }&lt;br /&gt;
authors = [&lt;br /&gt;
  { name = &amp;quot;Your Name&amp;quot;, email = &amp;quot;you@example.com&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
# 기본 의존성&lt;br /&gt;
dependencies = [&lt;br /&gt;
  &amp;quot;requests&amp;gt;=2.28&amp;quot;,&lt;br /&gt;
  &amp;quot;fastapi&amp;gt;=0.100&amp;quot;,&lt;br /&gt;
  &amp;quot;pydantic&amp;gt;=2.0&amp;quot;,&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
[project.optional-dependencies]&lt;br /&gt;
dev = [&amp;quot;pytest&amp;quot;, &amp;quot;ruff&amp;quot;, &amp;quot;mypy&amp;quot;]&lt;br /&gt;
docs = [&amp;quot;mkdocs&amp;quot;, &amp;quot;mkdocs-material&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[project.scripts]&lt;br /&gt;
my-cli = &amp;quot;my_project.cli:main&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[build-system]&lt;br /&gt;
requires = [&amp;quot;hatchling&amp;quot;]&lt;br /&gt;
build-backend = &amp;quot;hatchling.build&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uv 전용 설정 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[tool.uv]&lt;br /&gt;
# 개발 의존성 (표준 optional-dependencies와 별개)&lt;br /&gt;
dev-dependencies = [&lt;br /&gt;
  &amp;quot;pytest&amp;gt;=8.0&amp;quot;,&lt;br /&gt;
  &amp;quot;pytest-cov&amp;quot;,&lt;br /&gt;
  &amp;quot;ruff&amp;quot;,&lt;br /&gt;
  &amp;quot;mypy&amp;quot;,&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
# 인덱스 소스 커스텀&lt;br /&gt;
[[tool.uv.index]]&lt;br /&gt;
name = &amp;quot;pytorch-cpu&amp;quot;&lt;br /&gt;
url = &amp;quot;https://download.pytorch.org/whl/cpu&amp;quot;&lt;br /&gt;
explicit = true&lt;br /&gt;
&lt;br /&gt;
# 패키지별 소스 오버라이드 (개발 중인 로컬 패키지 등)&lt;br /&gt;
[tool.uv.sources]&lt;br /&gt;
my-lib = { path = &amp;quot;../my-lib&amp;quot;, editable = true }&lt;br /&gt;
other-lib = { git = &amp;quot;https://github.com/user/other-lib&amp;quot;, branch = &amp;quot;main&amp;quot; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 의존성 그룹 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[dependency-groups]&lt;br /&gt;
lint = [&amp;quot;ruff&amp;gt;=0.3&amp;quot;]&lt;br /&gt;
test = [&amp;quot;pytest&amp;gt;=8.0&amp;quot;, &amp;quot;pytest-cov&amp;quot;]&lt;br /&gt;
docs = [&amp;quot;mkdocs-material&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 특정 그룹만 설치&lt;br /&gt;
uv sync --group test&lt;br /&gt;
&lt;br /&gt;
# lint 그룹 실행&lt;br /&gt;
uv run --group lint ruff check .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CI/CD 활용 ==&lt;br /&gt;
&lt;br /&gt;
uv는 CI/CD 파이프라인에서 특히 빛난다. GitHub Actions, GitLab CI 등에서 설치 시간을 50~80% 단축시킬 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== GitHub Actions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
name: CI&lt;br /&gt;
&lt;br /&gt;
on: [push, pull_request]&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  test:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    steps:&lt;br /&gt;
      - uses: actions/checkout@v4&lt;br /&gt;
&lt;br /&gt;
      # uv 설치 (공식 액션)&lt;br /&gt;
      - name: Install uv&lt;br /&gt;
        uses: astral-sh/setup-uv@v4&lt;br /&gt;
        with:&lt;br /&gt;
          version: &amp;quot;latest&amp;quot;&lt;br /&gt;
          enable-cache: true  # GitHub 캐시 활성화&lt;br /&gt;
&lt;br /&gt;
      # 파이썬 설치&lt;br /&gt;
      - name: Set up Python&lt;br /&gt;
        run: uv python install 3.12&lt;br /&gt;
&lt;br /&gt;
      # 의존성 설치 (lock 파일 기반)&lt;br /&gt;
      - name: Install dependencies&lt;br /&gt;
        run: uv sync --frozen --all-extras&lt;br /&gt;
&lt;br /&gt;
      # 테스트 실행&lt;br /&gt;
      - name: Run tests&lt;br /&gt;
        run: uv run pytest&lt;br /&gt;
&lt;br /&gt;
      # 린트 검사&lt;br /&gt;
      - name: Lint&lt;br /&gt;
        run: uv run ruff check .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dockerfile&amp;quot;&amp;gt;&lt;br /&gt;
# Dockerfile&lt;br /&gt;
FROM python:3.12-slim&lt;br /&gt;
&lt;br /&gt;
# uv 설치&lt;br /&gt;
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/&lt;br /&gt;
&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
&lt;br /&gt;
# 의존성 먼저 복사 (캐시 레이어 최적화)&lt;br /&gt;
COPY pyproject.toml uv.lock ./&lt;br /&gt;
&lt;br /&gt;
# 의존성 설치 (가상환경 없이 시스템에 직접)&lt;br /&gt;
RUN uv sync --frozen --no-dev --system&lt;br /&gt;
&lt;br /&gt;
# 소스 코드 복사&lt;br /&gt;
COPY . .&lt;br /&gt;
&lt;br /&gt;
CMD [&amp;quot;uv&amp;quot;, &amp;quot;run&amp;quot;, &amp;quot;--system&amp;quot;, &amp;quot;python&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;myapp&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 실전 사용 예시 ==&lt;br /&gt;
&lt;br /&gt;
=== 데이터 과학 프로젝트 시작 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 프로젝트 초기화&lt;br /&gt;
uv init data-analysis&lt;br /&gt;
cd data-analysis&lt;br /&gt;
&lt;br /&gt;
# 파이썬 버전 고정&lt;br /&gt;
uv python pin 3.12&lt;br /&gt;
&lt;br /&gt;
# 무거운 패키지들도 빠르게 설치&lt;br /&gt;
uv add numpy pandas matplotlib scikit-learn jupyter&lt;br /&gt;
&lt;br /&gt;
# GPU 버전 PyTorch 추가&lt;br /&gt;
uv add torch --index-url https://download.pytorch.org/whl/cu121&lt;br /&gt;
&lt;br /&gt;
# 개발 도구 추가&lt;br /&gt;
uv add --dev pytest ruff mypy&lt;br /&gt;
&lt;br /&gt;
# Jupyter 실행&lt;br /&gt;
uv run jupyter lab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 웹 API 개발 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv init my-api&lt;br /&gt;
cd my-api&lt;br /&gt;
&lt;br /&gt;
uv add fastapi &amp;quot;uvicorn[standard]&amp;quot; sqlalchemy pydantic-settings&lt;br /&gt;
uv add --dev pytest httpx pytest-asyncio&lt;br /&gt;
&lt;br /&gt;
uv run uvicorn app.main:app --reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 간단한 일회성 스크립트 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# web_scraper.py&lt;br /&gt;
# /// script&lt;br /&gt;
# requires-python = &amp;quot;&amp;gt;=3.11&amp;quot;&lt;br /&gt;
# dependencies = [&lt;br /&gt;
#   &amp;quot;httpx&amp;quot;,&lt;br /&gt;
#   &amp;quot;beautifulsoup4&amp;quot;,&lt;br /&gt;
#   &amp;quot;rich&amp;quot;,&lt;br /&gt;
# ]&lt;br /&gt;
# ///&lt;br /&gt;
&lt;br /&gt;
import httpx&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
from rich import print&lt;br /&gt;
&lt;br /&gt;
resp = httpx.get(&amp;quot;https://news.ycombinator.com&amp;quot;)&lt;br /&gt;
soup = BeautifulSoup(resp.text, &amp;quot;html.parser&amp;quot;)&lt;br /&gt;
titles = [a.text for a in soup.select(&amp;quot;.titleline &amp;gt; a&amp;quot;)[:10]]&lt;br /&gt;
&lt;br /&gt;
for i, title in enumerate(titles, 1):&lt;br /&gt;
    print(f&amp;quot;[cyan]{i}.[/cyan] {title}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 위 스크립트를 공유받은 사람은 그냥 이렇게만 실행하면 끝&lt;br /&gt;
uv run web_scraper.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 기존 pip 프로젝트 마이그레이션 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 기존 requirements.txt 기반 프로젝트&lt;br /&gt;
cd existing-project&lt;br /&gt;
&lt;br /&gt;
# 방법 1: pip 인터페이스로 그대로 사용 (가장 쉬움)&lt;br /&gt;
uv pip install -r requirements.txt&lt;br /&gt;
uv pip sync requirements.txt&lt;br /&gt;
&lt;br /&gt;
# 방법 2: 완전한 uv 프로젝트로 전환&lt;br /&gt;
uv init .          # pyproject.toml 생성&lt;br /&gt;
uv add $(cat requirements.txt | grep -v &amp;quot;^#&amp;quot; | tr &amp;#039;\n&amp;#039; &amp;#039; &amp;#039;)&lt;br /&gt;
uv lock            # uv.lock 생성&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 주요 명령어 요약 ==&lt;br /&gt;
&lt;br /&gt;
=== 자주 쓰는 명령어 치트시트 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 작업 !! 명령어&lt;br /&gt;
|-&lt;br /&gt;
| 프로젝트 초기화 || `uv init &amp;lt;이름&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 패키지 추가 || `uv add &amp;lt;패키지&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 개발 의존성 추가 || `uv add --dev &amp;lt;패키지&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 패키지 제거 || `uv remove &amp;lt;패키지&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 의존성 동기화 || `uv sync`&lt;br /&gt;
|-&lt;br /&gt;
| Lock 파일 업데이트 || `uv lock`&lt;br /&gt;
|-&lt;br /&gt;
| 스크립트 실행 || `uv run &amp;lt;명령어&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 파이썬 설치 || `uv python install &amp;lt;버전&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 가상환경 생성 || `uv venv`&lt;br /&gt;
|-&lt;br /&gt;
| 도구 즉시 실행 || `uvx &amp;lt;도구명&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| 도구 영구 설치 || `uv tool install &amp;lt;도구명&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| pip 설치 || `uv pip install &amp;lt;패키지&amp;gt;`&lt;br /&gt;
|-&lt;br /&gt;
| requirements.txt 컴파일 || `uv pip compile requirements.in -o requirements.txt`&lt;br /&gt;
|-&lt;br /&gt;
| requirements.txt 동기화 || `uv pip sync requirements.txt`&lt;br /&gt;
|-&lt;br /&gt;
| 패키지 빌드 || `uv build`&lt;br /&gt;
|-&lt;br /&gt;
| PyPI 배포 || `uv publish`&lt;br /&gt;
|-&lt;br /&gt;
| 도움말 || `uv help` 또는 `uv &amp;lt;명령어&amp;gt; --help`&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 주의사항 및 한계 ==&lt;br /&gt;
&lt;br /&gt;
uv가 만능은 아니다. 아래와 같은 상황에서는 주의가 필요하다.&lt;br /&gt;
&lt;br /&gt;
=== pip과의 차이점 ===&lt;br /&gt;
&lt;br /&gt;
* uv는 `.egg` 형식을 지원하지 않는다. 레거시 패키지 중 일부는 문제가 생길 수 있다.&lt;br /&gt;
* `requires-python`의 상한 버전 제약 (예: `python&amp;lt;4.0`)을 무시한다. 의도적인 설계이나 간혹 예상과 다른 동작을 할 수 있다.&lt;br /&gt;
* 여러 패키지 인덱스가 있을 때 pip은 모두 확인하지만, uv는 패키지가 있는 &amp;#039;&amp;#039;&amp;#039;첫 번째 인덱스에서 바로 선택&amp;#039;&amp;#039;&amp;#039;한다.&lt;br /&gt;
&lt;br /&gt;
=== Conda와의 비교에서 ===&lt;br /&gt;
&lt;br /&gt;
* C/C++ 라이브러리 등 파이썬 외 시스템 의존성은 관리하지 못한다. CUDA 드라이버 자체를 설치하거나, HDF5 같은 시스템 라이브러리가 필요한 경우 별도 관리가 필요하다.&lt;br /&gt;
* 바이오인포매틱스 등 Bioconda 채널 특화 패키지는 Conda 쪽이 더 편할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 성숙도 ===&lt;br /&gt;
&lt;br /&gt;
* 2024년 출시로 역사가 짧다. pip(2008), Poetry(2018) 등에 비해 엣지 케이스 지원이 부족할 수 있다.&lt;br /&gt;
* 다만 Astral 팀이 매우 빠른 속도로 개발하고 있어 빠르게 개선되는 중이다.&lt;br /&gt;
&lt;br /&gt;
== 생태계 통합 ==&lt;br /&gt;
&lt;br /&gt;
=== IDE 지원 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PyCharm&amp;#039;&amp;#039;&amp;#039; — 2024.3.2 버전부터 uv 공식 지원. 가상환경 생성 및 관리 통합. 2025년 버전에서는 uv가 기본 환경 관리자로 설정되었다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VS Code&amp;#039;&amp;#039;&amp;#039; — Python 확장에서 uv 가상환경 자동 인식&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cursor, Windsurf&amp;#039;&amp;#039;&amp;#039; 등 AI 에디터들도 uv 환경 지원&lt;br /&gt;
&lt;br /&gt;
=== 프레임워크 통합 ===&lt;br /&gt;
&lt;br /&gt;
* [[FastAPI]], [[Django]], [[Flask]] 등 주요 웹 프레임워크 문서에서 uv를 권장 패키지 관리자로 소개하기 시작했다.&lt;br /&gt;
* [[Hatch]], [[PDM]] 등 다른 모던 패키지 관리자들과도 호환 가능한 `pyproject.toml` 포맷을 공유한다.&lt;br /&gt;
&lt;br /&gt;
=== Claude Code와의 통합 ===&lt;br /&gt;
&lt;br /&gt;
[[Anthropic]]의 Claude Code는 파이썬 프로젝트 설정 시 uv를 기본으로 추천하고 사용한다. AI 코딩 어시스턴트와의 자연스러운 통합이 이루어지는 추세다.&lt;br /&gt;
&lt;br /&gt;
== 여담 ==&lt;br /&gt;
&lt;br /&gt;
* uv의 이름은 특별한 의미 없이 짧고 기억하기 쉬운 이름을 선택한 것으로 알려져 있다. 공식 스타일 가이드에서는 &amp;#039;&amp;#039;&amp;#039;반드시 소문자로 &amp;quot;uv&amp;quot;라고 표기&amp;#039;&amp;#039;&amp;#039;하도록 명시하고 있다.[* UV, Uv 등으로 쓰지 말 것을 권장한다.]&lt;br /&gt;
&lt;br /&gt;
* [[Rust]]로 파이썬 도구를 만드는 트렌드가 눈에 띈다. [[Ruff]](린터), uv(패키지 관리자), [[Rye]](프로젝트 관리)가 모두 Rust로 만들어졌다. 파이썬 생태계의 인프라 도구를 파이썬이 아닌 Rust로 만드는 아이러니가 재미있다는 반응도 있다.&lt;br /&gt;
&lt;br /&gt;
* uv의 의존성 해결 알고리즘인 PubGrub은 원래 [[Dart]] 언어의 패키지 관리자 `pub`을 위해 설계되었고, 이후 [[Rust]] 크레이트(`pubgrub-rs`)로 포팅되었다. uv는 이 Rust 구현체를 활용한다.&lt;br /&gt;
&lt;br /&gt;
* uv는 [[Cargo]](Rust), [[pnpm]](Node.js), [[Bun]](JavaScript), [[Orogene]](Node.js) 등 다른 언어 생태계의 패키지 관리자들에서 영감을 많이 받았다고 공식적으로 밝히고 있다.&lt;br /&gt;
&lt;br /&gt;
* 일부 개발자들은 uv를 처음 사용하고 속도에 충격을 받아 &amp;quot;이게 진짜야?&amp;quot;라는 반응을 보이곤 한다. pip으로 수분이 걸리던 작업이 수초 만에 끝나는 경험이 매우 낯설게 느껴지기 때문이다.&lt;br /&gt;
&lt;br /&gt;
* 가상환경 생성이 0.5초 수준이 되면서 &amp;quot;가상환경은 무겁다&amp;quot;는 기존 인식이 바뀌고 있다. 이제는 브랜치마다 별도 가상환경을 만드는 워크플로우도 현실적으로 가능해졌다.&lt;br /&gt;
&lt;br /&gt;
== 관련 항목 ==&lt;br /&gt;
&lt;br /&gt;
* [[pip]] — uv가 대체하는 기존 파이썬 패키지 관리자&lt;br /&gt;
* [[virtualenv]] / [[venv]] — uv가 통합한 가상환경 도구&lt;br /&gt;
* [[Poetry]] — uv와 경쟁하는 파이썬 프로젝트 관리 도구&lt;br /&gt;
* [[pyenv]] — uv가 대체 가능한 파이썬 버전 관리 도구&lt;br /&gt;
* [[pipx]] — uv(uvx)가 대체 가능한 CLI 도구 격리 실행 도구&lt;br /&gt;
* [[Ruff]] — 같은 Astral 팀이 만든 초고속 파이썬 린터/포매터&lt;br /&gt;
* [[Cargo]] — uv가 목표로 삼는 Rust의 패키지 관리자&lt;br /&gt;
* [[Rust (프로그래밍 언어)]] — uv의 구현 언어&lt;br /&gt;
* [[Astral]] — uv 개발사&lt;br /&gt;
&lt;br /&gt;
== 외부 링크 ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.astral.sh/uv/ uv 공식 문서]&lt;br /&gt;
* [https://github.com/astral-sh/uv uv GitHub 저장소]&lt;br /&gt;
* [https://astral.sh/blog/uv uv 최초 발표 블로그 포스트]&lt;br /&gt;
* [https://astral.sh/blog/uv-unified-python-packaging uv 통합 패키지 관리 발표 블로그]&lt;br /&gt;
* [https://pypi.org/project/uv/ uv PyPI 페이지]&lt;br /&gt;
&lt;br /&gt;
[[분류:파이썬]]&lt;br /&gt;
[[분류:패키지 관리자]]&lt;br /&gt;
[[분류:개발 도구]]&lt;br /&gt;
[[분류:Rust로 작성된 소프트웨어]]&lt;br /&gt;
[[분류:오픈 소스 소프트웨어]]&lt;/div&gt;</summary>
		<author><name>Gaon12</name></author>
	</entry>
</feed>