uv

uv 0.4+

uv CLI 빠른 참조 — Python 프로젝트 초기화, 의존성 관리, 가상 환경, lockfile 해석, 툴 러너, 자체 업데이트 — 자주 쓰는 옵션과 실전 예시까지 함께 정리했습니다.

명령어 39개

uv 설치

curl -LsSf https://astral.sh/uv/install.sh | sh

macOS / Linux용 공식 원라인 설치 프로그램 — uv를 `~/.local/bin`에 설치하고 현재 셸의 PATH에 추가합니다.

curl -LsSf https://astral.sh/uv/install.sh | sh
pipx install uv

관리되는 Python 설치에서 uv를 격리된 CLI 툴로 설치합니다(권장).

pipx install uv
winget install --id=astral-sh.uv

Windows Package Manager(Windows 10/11)를 통해 uv를 설치합니다.

winget install --id=astral-sh.uv

자체 업데이트

uv self update

uv를 최신 릴리스로 업데이트합니다. 다음 사전 릴리스를 받으려면 `--preview`을 사용하세요.

--preview; --stable

uv self update

Python 버전

uv python install <ver>

Python 인터프리터를 uv의 관리 캐시(`~/.cache/uv` / `%LOCALAPPDATA%\uv`)에 다운로드합니다. `3.12`, `3.11.9`, 또는 nightly용 `cpython-3.13.0a5`도 전달할 수 있습니다.

3.12; 3.11.9; [email protected]; --mirror

uv python install 3.12
uv python list

uv가 다운로드할 수 있는 모든 Python 인터프리터(CPython, PyPy, free-threaded 빌드)를 나열합니다. 이미 가진 것만 필터링하려면 `--only-installed`를 사용하세요.

--only-installed; --all-versions; --arch; --os

uv python list --only-installed
uv python find

현재 디렉터리에서 uv가 사용할 인터프리터의 경로를 출력합니다. `.python-version`, `pyproject.toml`, 활성 virtualenv를 존중합니다.

<version>

uv python find 3.12
uv python pin <ver>

현재 프로젝트의 Python 버전을 고정합니다 — `.python-version`을 작성합니다. CI / Docker는 이를 읽어 로컬 인터프리터와 일치시킬 수 있습니다.

uv python pin 3.12

프로젝트 초기화

uv init <name>

새 Python 프로젝트를 스캐폴딩합니다: `pyproject.toml`, hello-world 모듈, `.gitignore`, 옵션으로 tests / README.

--package 배포 가능 패키지로 빌드; --lib 라이브러리로 빌드; --bare 소스 레이아웃 없음; --python <ver>; --no-readme; --no-pin-python

uv init my-app --package --python 3.12
uv init --lib <name>

라이브러리 프로젝트를 초기화합니다(src 레이아웃, `from <name> import ...` 노출).

uv init my-lib --lib

동기화

uv sync

`pyproject.toml`과 `uv.lock`에 선언된 모든 의존성을 프로젝트 virtualenv에 설치합니다. 멱등이며, `--frozen`은 lockfile 업데이트를 건너뛰고, `--locked`는 변경 시 실패합니다.

--frozen; --locked; --no-dev; --extra <name>; --all-extras; --group <name>; --no-install-project

uv sync --all-extras
uv lock

설치하지 않고 `uv.lock` 파일을 해석하고 작성합니다. `pyproject.toml`과 일치하는지 검증하려면 `--check`를 사용하세요(CI에서 유용).

--check; --upgrade; --upgrade-package <pkg>; --frozen; --dry-run

uv lock --check

추가 / 제거

uv add <pkg>

`pyproject.toml`에 의존성을 추가하고 `uv.lock`을 업데이트하며 venv에 설치합니다.

--dev; --group <name>; --optional <extra>; --upgrade; --<specifier>; --editable <path>; --raw; --no-sync; --python <ver>

uv add requests rich
uv add 'requests>=2.32'

버전 지정자(PEP 440)와 함께 의존성을 추가합니다. 셸에서 따옴표 사용을 권장합니다.

uv add 'requests>=2.32,<3'
uv add --dev pytest ruff mypy

개발 전용 의존성을 추가합니다 — `pyproject.toml`의 `[dependency-groups].dev]`에 들어갑니다.

uv add --dev pytest ruff
uv add --group docs sphinx

명명된 의존성 그룹에 추가합니다. 여러 그룹은 `uv sync --group docs --group lint`로 설치할 수 있습니다.

uv add --group lint ruff mypy
uv remove <pkg>

`pyproject.toml`, lockfile, venv에서 의존성을 제거합니다.

--dev; --group <name>; --optional <extra>

uv remove requests

실행

uv run <cmd>

프로젝트 virtualenv에서 명령을 실행합니다. venv가 없으면 자동으로 다시 만듭니다.

--with <pkg> 임시 의존성 추가; --with-requirements <file>; --no-sync; --locked; --frozen; --isolated; --refresh-package <pkg>; --package <name>

uv run python -m myapp
uv run pytest

프로젝트 venv에 설치된 툴을 실행합니다 — 먼저 venv를 활성화할 필요가 없습니다.

uv run pytest -x --cov
uv run --with requests python -c 'print(requests.__version__)'

다음에 캐시될 일회성 의존성으로 임시 스크립트를 실행합니다.

uv run --with httpx python -c 'import httpx; print(httpx.get("https://example.com").status_code)'
uv run script.py

PEP 723 인라인 메타데이터를 사용하는 Python 스크립트를 실행합니다(uv는 상단의 `# /// script` 블록을 읽고 즉시 해석합니다).

--no-sync

uv run ./hello.py

venv 관리

uv venv

`.venv`에 프로젝트 virtualenv를 만듭니다. pip + setuptools를 함께 번들하려면 `--seed`를 사용하세요.

<path>; --python <ver>; --seed; --no-seed; --prompt <name>; --system-site-packages; --clear; --relocatable

uv venv --python 3.12
uv venv --seed

venv를 만들고 pip / setuptools / wheel도 설치합니다 — venv 내부에서 `pip install` 워크플로우에 필요합니다.

uv venv --seed --python 3.11
uv remove

프로젝트 venv와 lockfile을 삭제합니다. 처음부터 다시 시작하려면 `uv sync`와 함께 사용하세요.

uv remove && uv sync

CLI 툴 실행

uvx <tool>

임시 환경에서 CLI 툴을 실행합니다(`uv tool run`의 별칭). 첫 사용 후 캐시됩니다.

<tool>@<ver>; --from <pkg>; --with <dep>; --upgrade; --quiet

uvx ruff check .
uvx --from 'pycowsay>=2.0' cowsay 'Hello uv!'

특정 패키지가 노출하는 툴을 실행합니다(패키지 이름과 CLI 이름이 다른 경우).

uvx --from 'sqlfluff' sqlfluff lint models/

툴 설치

uv tool install <pkg>

글로벌 CLI 툴을 격리된 환경에 설치합니다(pipx와 유사). 툴이 PATH에서 사용 가능해집니다.

--python <ver>; --with <dep>; --reinstall; --quiet; --force

uv tool install ruff
uv tool list

`uv tool install`로 설치된 모든 CLI 툴을 나열합니다.

uv tool list
uv tool uninstall <pkg>

`uv tool install`로 설치된 CLI 툴을 제거합니다.

--quiet

uv tool uninstall ruff
uv tool upgrade

설치된 모든 툴을 최신 버전으로 업그레이드합니다(`uv tool update-self`와 pin 파일 존중). 한 툴만 대상으로 하려면 이름을 전달하세요.

<tool>; --all; --reinstall; --quiet

uv tool upgrade --all

인덱스 / 캐시

uv cache clean

uv의 모듈 캐시(`~/.cache/uv`)를 비웁니다. 전체 재다운로드를 강제하려면 `uv sync --refresh`와 함께 사용하세요.

<package>; --force

uv cache clean ruff
uv cache dir

uv가 다운로드한 wheel에 사용하는 캐시 디렉터리를 출력합니다.

uv cache dir
uv pip install <pkg>

pip 호환 모드로 진입합니다 — 기존 프로젝트를 마이그레이션하거나 툴이 여전히 `pip`을 호출할 때 유용합니다.

<pkg>; -r <requirements.txt>; -e <path>; --index-url <url>

uv pip install -r requirements.txt
uv pip compile <in> -o <out>

`requirements.in`을 고정된 `requirements.txt`로 해석합니다(`pip-tools`와 유사).

uv pip compile requirements.in -o requirements.txt --upgrade

빌드 / 게시

uv build

프로젝트의 소스 배포판과 wheel을 빌드합니다(`pyproject.toml`에 따라 hatchling / setuptools / poetry core 플러그인 사용).

-o <dir>; --wheel; --sdist; --no-byte-compile

uv build
uv publish

빌드된 아티팩트를 PyPI(또는 `--index`를 통해 사용자 정의 인덱스)에 업로드합니다.

--token <pypi-token>; --index <name>; --publish-url <url>; --trusted-publishing <on|off>

uv publish --token $PYPI_TOKEN

진단

uv --version

uv 버전을 출력합니다.

uv --version
uv help

모든 uv 하위 명령을 나열합니다.

uv help
uv help <subcommand>

한 하위 명령의 전체 플래그 목록을 출력합니다.

uv help sync

관련 명령어 치트시트

uv 소개

uv는 Astral(ruff와 Python 타입 검사기 ty 팀)이 Rust로 만든 극도로 빠른 Python 패키지 및 프로젝트 매니저입니다. 2024년에 처음 출시되었으며, pip, pip-tools, pipx, pyenv, virtualenv, 그리고 Poetry / pdm의 일부까지 한 바이너리로 대체하는 것을 목표로 합니다. 다운로드를 병렬화하고 글로벌 모듈 캐시(`~/.cache/uv`)를 사용해 pip보다 10-100배 빠르게 패키지를 설치합니다. uv는 표준 `pyproject.toml`(PEP 621)과 더 새로운 PEP 723 인라인 스크립트 메타데이터(자체 의존성을 선언하는 단일 파일 스크립트)를 사용합니다. macOS, Linux, Windows에서 동작하며, 약 30MB의 단일 바이너리(homebrew / pipx-installer / curl-install.sh / winget)로 제공됩니다. uv는 코드를 어디에도 업로드하지 않으며, 설정된 Python 패키지 인덱스(`--index-url`, 기본 PyPI)와만 통신합니다.

치트시트 버전 1.0.0