Rye & uv 완벽 가이드 — Python 패키징을 Rust 속도로, pip·poetry·pyenv 대체
이 글의 핵심
Astral 팀이 개발한 Rye와 uv는 "Python 패키징·환경 관리의 모든 문제를 Rust 속도로 해결"하는 차세대 도구입니다. Ruff(린터/포매터)에 이어 pip install 10-100배 고속화·pyenv 대체·poetry 대체를 단일 바이너리로 제공합니다. 2025-2026년 Rye가 uv로 통합되면서 사실상 Python 패키징의 새 표준으로 자리잡고 있습니다.
Astral 팀과 Rust 기반 Python 도구 혁명
탄생 배경: “Python 도구가 왜 이렇게 느린가?”
Astral은 2022년 Charlie Marsh가 설립한 회사로, “Python 개발 도구를 Rust로 재작성”하는 미션을 가지고 있습니다. Charlie는 Khan Academy 엔지니어로 일하며 Flake8(린터)이 대형 코드베이스에서 너무 느리다는 문제를 겪었고, Rust로 재작성한 Ruff(2022)를 공개했습니다.
Ruff의 성공:
- Flake8 대비 10-100배 빠름
- Black(포매터) 대체 기능 추가
- 2023년 Astro·Pandas·FastAPI 등 대형 프로젝트 채택
- 2024년 $10M 투자 유치
이 성공 후 Astral은 “Python의 모든 느린 도구를 Rust로”를 목표로 uv(2024)를 공개했습니다.
uv vs pip vs poetry vs conda: 벤치마크
공식 벤치마크(Django 프로젝트, M1 Mac):
| 도구 | 설치 시간 | 배수 |
|---|---|---|
| uv | 0.3초 | 1x |
| pip | 9.3초 | 31x |
| poetry | 38.2초 | 127x |
| conda | 61.5초 | 205x |
대형 프로젝트(PyTorch + dependencies, 2GB):
- pip: ~5분
- poetry: ~10분 (lock 해결 포함)
- uv: ~20초
속도의 비밀:
- Rust 병렬 처리: 다운로드·압축 해제·설치를 CPU 코어 수만큼 병렬 실행
- 전역 캐시:
~/.cache/uv/에 wheel 캐시, 재사용 시 0초 - 최적화된 Resolver: pubgrub 알고리즘으로 의존성 충돌 빠르게 해결
Rye → uv 통합: 왜 하나로 합쳤나?
Rye(2023): Armin Ronacher(Flask 개발자)가 만든 “Python의 Cargo”
- pyproject.toml 중심 워크플로우
- Python 버전 관리 내장
- 가상환경·의존성·빌드 통합
uv(2024): Astral이 만든 “pip 고속 대체재”
- 처음엔 pip 호환만
- 점차 poetry 기능 추가
2024년 말 결정: Astral이 Rye 워크플로우를 uv에 통합
uv init,uv add,uv run추가- Rye는 “uv wrapper”로 유지
- 사실상 uv 하나면 모든 것
설치
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# pip (비권장 — 부트스트랩용)
pip install uv
uv --version
첫 프로젝트
uv init my-app
cd my-app
uv add fastapi uvicorn
uv add --dev pytest ruff
uv run main.py
uv run pytest
uv init:pyproject.toml+uv.lock생성uv add: 의존성 추가 + 가상환경 자동 생성uv run: 가상환경 안에서 명령 실행
pyproject.toml
[project]
name = "my-app"
version = "0.1.0"
description = "My Python app"
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.115",
"uvicorn[standard]>=0.32",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3",
"ruff>=0.8",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.uv]
dev-dependencies = ["ipython>=8.20"]
[tool.ruff]
line-length = 100
uv add가 dependencies를 자동 수정.
가상환경
# 가상환경 생성
uv venv
# 활성화
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# uv run으로 활성화 생략 가능
uv run python script.py
uv run pytest
uv venv는 초고속(1초 미만). Python 버전도 uv venv --python 3.12로 명시.
Python 버전 관리 (pyenv 대체)
# Python 설치 (여러 버전 공존)
uv python install 3.12 3.11 3.10
# 프로젝트별 고정
uv python pin 3.12
# 버전 확인
uv python list
uv python find 3.11
.python-version 파일을 생성해 uv·pyenv·mise 모두 인식합니다.
의존성 설치
# pyproject.toml 기반
uv sync # install + lock 갱신
# requirements.txt 레거시
uv pip install -r requirements.txt
# 글로벌 도구 (pipx 대체)
uv tool install ruff
uv tool install black
uv tool run ruff check .
lock 파일 (uv.lock)
uv sync가uv.lock생성/갱신- 플랫폼·Python 버전별 해시 포함
- 팀원·CI가 정확히 같은 버전 설치
Poetry의 poetry.lock와 유사하지만 훨씬 빠르게 해결.
워크스페이스 (Monorepo)
# 루트 pyproject.toml
[tool.uv.workspace]
members = ["packages/*"]
[tool.uv]
dev-dependencies = ["pytest>=8.3"]
# packages/core/pyproject.toml
[project]
name = "my-core"
version = "0.1.0"
dependencies = []
uv sync # 루트에서 모든 워크스페이스 동시 설치
uv run --package my-core pytest
pnpm workspaces 같은 경험이 Python에 온 것.
Docker 통합
FROM python:3.12-slim AS builder
WORKDIR /app
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
COPY pyproject.toml uv.lock ./
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-dev
FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY . .
ENV PATH="/app/.venv/bin:$PATH"
CMD ["python", "main.py"]
uv 캐시로 CI 빌드가 극적으로 빨라집니다.
CI: GitHub Actions
- uses: astral-sh/setup-uv@v4
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
- run: uv sync --frozen
- run: uv run pytest
- run: uv run ruff check .
uv 바이너리 다운로드 + 캐싱까지 자동 처리.
Ruff와의 조합
uv add --dev ruff
uv run ruff check .
uv run ruff format .
Astral 팀이 같이 만들어 통합이 완벽합니다.
비교 요약
| 도구 | 속도 | 기능 | 표준 |
|---|---|---|---|
| pip | 느림 | 기본 | PyPI 표준 |
| poetry | 느림 | 풍부 | 자체 lock |
| pipenv | 느림 | 기본+ | Pipfile |
| uv | 극도로 빠름 | 풍부 | pyproject.toml |
트러블슈팅
uv sync 실패
--frozen없이uv sync로 lock 재해결uv cache clean후 재시도
Python 버전 안 잡힘
uv python install 3.12로 명시 설치.python-version또는requires-python확인
특정 패키지 빌드 실패
- 컴파일러(gcc, clang) 필요한 패키지 → 시스템 의존성 설치
uv pip install --no-binary :all:로 소스 빌드 강제
Docker에서 느림
--mount=type=cache,target=/root/.cache/uv로 캐시 마운트- multi-stage build로 빌드 아티팩트 분리
체크리스트
- uv 설치 + shell PATH 확인
-
uv init+pyproject.toml표준화 -
uv.lock커밋 -
uv sync --frozenCI 적용 - Python 버전
uv python install+pin - 글로벌 도구
uv tool install - Ruff 통합 (린트·포맷)
- Docker에 uv 캐시 마운트
마무리
uv는 Python 패키징 생태계에 Rust 속도를 가져온 혁명적 도구입니다. pip·poetry·pyenv가 각자 해결하던 문제를 단일 바이너리로 통합하면서 속도는 10-100배 빨라졌습니다. Astral 팀의 Ruff·Ruff-lsp에 이어 uv가 표준이 되면서 “Python 도구 체인의 느림”이라는 오래된 불만이 완전히 해소되고 있습니다. 기존 pip·poetry 프로젝트도 uv sync 한 번으로 이주 체험이 가능하니, 지금 바로 CI 빌드 시간 측정과 함께 도입을 시도해보길 권장합니다.
관련 글
- Python 완벽 가이드
- Poetry 완벽 가이드
- Ruff 린터/포매터 가이드
- mise 런타임 버전 관리 가이드
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. Astral 팀의 Rye와 uv로 Python 프로젝트 관리를 혁신. Rust 기반으로 10-100배 빠른 의존성 설치, pyproject.toml·가상환경·Python 버전 관리 통합. pip·poetry·pyen… 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 또는 관련 글 링크를 따라가면 순서대로 배울 수 있습니다. C++ 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 해당 라이브러리 공식 문서를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- Python pip uv poetry 비교 | 속도·lock·가상환경·프로젝트 세팅
- mise-en-place 완벽 가이드 — nvm·pyenv·asdf를 대체하는 Rust 기반 런타임 매니저
- Nix & NixOS 완벽 가이드 — 재현 가능한 개발 환경·빌드·배포 시스템
이 글에서 다루는 키워드 (관련 검색어)
Python, uv, Rye, Package Manager, pip, poetry, Rust, Astral, DevOps 등으로 검색하시면 이 글이 도움이 됩니다.