콘월 이층집

Python

uv 패키지 관리자: 빠르고 효율적인 차세대 도구

반응형

uv 패키지 관리자: 빠르고 효율적인 차세대 도구

A person reads 'Python for Unix and Linux System Administration' indoors.
Photo by Christina Morillo on Pexels

패키지 관리는 현대 소프트웨어 개발의 필수 요소입니다. Python 개발자라면 pip를 사용해 봤을 겁니다. 그런데 최근 개발 커뮤니티에서 빠르게 주목받는 새로운 패키지 관리자가 있습니다. 바로 uv입니다.

uv는 Rust로 만들어진 차세대 패키지 관리자로, 기존 도구들보다 훨씬 빠른 속도와 간결한 사용성을 자랑합니다. Python 프로젝트 관리를 획기적으로 개선할 수 있습니다. 이 글에서는 uv가 무엇인지, 어떻게 설치하고 사용하는지 차근차근 알아보겠습니다.

1. uv란 무엇인가요?

uv의 탄생 배경

uv는 Astral이라는 회사에서 만든 Python 전용 패키지 관리자입니다. Python 생태계에서 느려진 패키지 설치 속도를 개선하기 위해 Rust라는 고성능 프로그래밍 언어로 개발되었습니다.

기존의 pip 같은 도구는 Python으로 만들어져 있었는데, 프로젝트가 커질수록 설치 속도가 눈에 띄게 느려지는 문제가 있었습니다. uv는 이 문제를 근본적으로 해결하려고 등장했습니다.

핵심 특징

압도적인 속도
가장 큰 장점은 설치 속도입니다. pip 대비 10~100배 빠르다고 알려져 있습니다. 복잡한 의존성을 가진 프로젝트도 몇 초 안에 설정할 수 있습니다.

효율적인 캐싱
패키지를 한 번 다운로드하면 로컬에 캐시해 두었다가 다른 프로젝트에서도 재사용합니다. 디스크 공간을 효율적으로 사용할 수 있습니다.

단순하고 직관적인 명령어
학습 곡선이 낮습니다. pip의 복잡한 옵션 없이도 필요한 기능을 간단하게 사용할 수 있습니다.

Python 버전 자동 관리
프로젝트에 필요한 Python 버전을 자동으로 다운로드하고 관리합니다.

2. 왜 uv를 사용해야 할까요?

장점

개발 생산성 향상
느린 설치 시간은 개발자의 집중력을 방해합니다. uv로 바꾸면 패키지 설치 시간을 크게 단축해 더 빠르게 개발에 집중할 수 있습니다.

CI/CD 파이프라인 가속화
서버에서 프로젝트를 배포할 때도 uv의 빠른 속도가 큰 도움이 됩니다. 빌드 시간이 줄어드는 만큼 배포 주기도 단축됩니다.

디스크 공간 절약
효율적인 캐싱 덕분에 같은 패키지를 여러 프로젝트에서 중복으로 저장하지 않습니다.

현대적인 설계
보안 검증, 의존성 해결 알고리즘 등 최신 모범 사례를 적용해 만들어졌습니다.

고려할 점

아직 비교적 새로운 도구라서 생태계가 pip나 poetry만큼 성숙하지 않을 수 있습니다. 모든 패키지가 uv와 완벽하게 호환되는지 확인해야 할 수도 있습니다.

3. uv 설치하기

시스템 요구 사항

uv는 macOS, Linux, Windows에서 모두 작동합니다. 특별한 프로그래밍 언어를 미리 설치할 필요도 없습니다.

macOS / Linux 설치

curl을 사용한 설치 (가장 간단)

터미널을 열고 다음 명령어를 입력합니다:

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

설치가 완료되면 터미널을 재시작합니다.

Homebrew 사용 (macOS)

Homebrew가 설치되어 있다면:

brew install uv

Windows 설치

PowerShell 사용

PowerShell을 관리자 권한으로 열고 다음을 입력합니다:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

설치 확인

설치가 제대로 되었는지 확인하려면:

uv --version

버전 번호가 나타나면 설치가 완료된 것입니다.

4. uv 기본 사용법 익히기

새 프로젝트 시작하기

가장 먼저 할 일은 프로젝트를 초기화하는 것입니다. my-project라는 이름의 새 프로젝트를 만들어 보겠습니다:

uv init my-project
cd my-project

이 명령어를 실행하면 다음과 같은 파일들이 생성됩니다:

  • pyproject.toml - 프로젝트 설정 파일
  • .python-version - 사용할 Python 버전 정보

패키지 설치하기

이미 존재하는 프로젝트로 이동했다면, 의존성 파일에 정의된 패키지들을 한 번에 동기화합니다:

uv sync

특정 패키지만 설치하려면:

uv add requests

이 명령어는 requests 패키지를 설치하고 자동으로 pyproject.tomluv.lock에 추가합니다.

패키지 버전 지정하기

특정 버전의 패키지가 필요하면:

uv add "requests==2.31.0"

또는 최소 버전을 지정할 수 있습니다:

uv add "requests>=2.30.0"

패키지 업데이트하기

특정 패키지의 잠금 파일을 업데이트합니다:

uv lock --upgrade-package requests

모든 패키지를 업데이트하고 동기화하려면:

uv sync --upgrade

패키지 제거하기

더 이상 필요 없는 패키지를 제거합니다:

uv remove requests

개발용 의존성 관리

테스트나 개발 단계에서만 필요한 패키지는 따로 관리할 수 있습니다. 예를 들어 pytest는 개발 시에만 필요합니다:

uv add --dev pytest

이렇게 설치한 패키지는 pyproject.toml[dependency-groups] 섹션에 저장됩니다.

프로젝트 실행하기

uv가 관리하는 환경에서 Python 스크립트를 실행하려면:

uv run python main.py

또는 간단하게:

uv run main.py

5. 좀 더 깊게 알아보기

Python 버전 관리

uv는 프로젝트에 필요한 Python 버전을 자동으로 다운로드하고 관리합니다:

uv python install 3.11

.python-version 파일에 명시된 버전을 프로젝트에서 자동으로 사용합니다.

도구 실행 (uvx)

외부 패키지의 명령어를 직접 실행할 수 있습니다. 별도 설치 없이도 최신 버전을 자동으로 다운로드해 실행합니다:

uv tool run black main.py

또는:

uvx black main.py

pyproject.toml 이해하기

uv는 Python 프로젝트의 표준 설정 파일인 pyproject.toml을 사용합니다. 간단한 예시는 다음과 같습니다:

[project]
name = "my-project"
version = "0.1.0"
description = "나의 첫 Python 프로젝트"
requires-python = ">=3.8"
dependencies = [
    "requests>=2.30.0",
    "flask>=2.0.0",
]

[dependency-groups]
dev = [
    "pytest>=7.0.0",
    "black>=23.0.0",
]

가상 환경의 이점

uv는 자동으로 각 프로젝트를 위한 격리된 가상 환경을 만듭니다. 이는 다른 프로젝트의 패키지와 충돌하지 않도록 보장합니다. 직접 가상 환경을 활성화할 필요가 없습니다. uv가 자동으로 관리합니다.

기존 pip 프로젝트에서 전환하기

이미 pip를 사용하는 프로젝트가 있다면 uv로 전환할 수 있습니다. uv init을 실행하면 기존 requirements.txt를 자동으로 읽어 pyproject.toml으로 변환합니다:

uv init
uv sync

6. uv vs 기존 Python 패키지 관리자

속도 비교

실제 벤치마크에 따르면:

  • pip: 평균 10~30초 (대규모 프로젝트)
  • poetry: 평균 5~15초
  • pdm: 평균 3~8초
  • uv: 평균 0.5~1초

이러한 속도 차이는 프로젝트가 크고 의존성이 많을수록 더 벌어집니다.

기능 비교

기능 uv pip poetry pdm conda
속도 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
사용 편의성 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐
Python 버전 관리 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
커뮤니티 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
안정성 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐

어떤 상황에 어떤 도구를 선택할까?

uv를 추천하는 경우:

  • 최신 기술 스택을 좋아하고 설치 속도를 최우선으로 생각하는 경우
  • 개인 프로젝트나 스타트업에서 빠른 개발 속도가 중요한 경우
  • Python 버전 관리를 자동화하고 싶은 경우

기존 도구를 유지하는 것이 좋은 경우:

  • 큰 기업 환경에서 검증된 도구를 선호하는 경우
  • 레거시 시스템과의 호환성이 중요한 경우
  • 풍부한 커뮤니티 리소스와 문제 해결 방법이 필요한 경우

7. uv 사용 시 팁과 주의사항

캐시 관리

한 번 다운로드한 패키지는 로컬 캐시에 저장되어 인터넷 연결이 끊어진 경우에도 사용할 수 있습니다. 이는 특히 CI/CD 환경에서 유용합니다.

문제 발생 시 캐시를 초기화할 수 있습니다:

uv cache clean

잠금 파일 관리

uv.lock 파일은 정확한 버전의 의존성을 기록합니다. 이를 버전 관리 시스템에 커밋하면 팀 전체가 동일한 환경에서 작업할 수 있습니다.

커뮤니티 지원

uv는 빠르게 발전하는 프로젝트입니다. 공식 문서와 GitHub 저장소에서 최신 정보를 확인하세요:

8. 결론

uv는 Python 개발의 속도를 획기적으로 높일 수 있는 도구입니다. 특히 개발 초기 단계에서 빠른 속도의 중요성이 커지면서, uv는 점점 더 많은 개발자들에게 주목받고 있습니다.

기존 패키지 관리자를 완벽하게 대체하는 솔루션은 아니지만, 새로운 프로젝트를 시작한다면 uv를 시도해 볼 가치가 있습니다. 빠른 설치 속도와 간단한 사용법, 자동 Python 버전 관리가 개발 경험을 크게 개선할 것입니다.

앞으로 uv가 어떻게 발전할지 지켜보는 것도 흥미로울 것 같습니다.

반응형

프로젝트 microGPT - 소개

반응형

microGPT는 지난 2월 12일에 Andrej Karpathy가 만든 GPT(Transformer) 모델의 가장 단순한 형태를 보여주는 200줄짜리 순수 Python 코드 프로젝트이다.

https://karpathy.github.io/2026/02/12/microgpt/

 

외부 라이브러리(PyTorch, NumPy 등)없이 기본 알고리즘 전체를 구현한 코드여서 공부하기에 좋다. CUDA도 사용하지 않았기에 CPU에서 구동이 가능하다. 

지난 코드컨벤션 게시글 처럼, 시간이 될 때마다 틈틈이 해당 내용을 정리해 나갈 예정이다.

반응형

+ 최근 글