파이썬 패키지 설치 툴 uv 소개 및 적용기

조현민·2025년 4월 30일
post-thumbnail

📚 공식 문서 : https://docs.astral.sh/uv/

🎈 계기

Python에서 패키지를 자동으로 설치해주는 프로그램을 만들던 중, 기존 pip 기반 설치 방식이 느리다고 느꼈습니다. 이를 개선하기 위해 새로운 툴인 uv를 적용해 보기로 했습니다.

💡 uv가 뭘까?

uv logo

패키지 설치, 종속성 관리, 빌드, 배포까지 가능한 올인원 Python 프로젝트 관리 도구

기존의 pip, pip-tools, poetry, pyenv, pipx 등을 통합해 하나로 대체할 수 있는 툴이다.

🔎 주요 특징

  • pip보다 10~100배 빠른 설치 속도
  • Cargo 스타일의 워크스페이스 지원
  • 범용 잠금 파일을 통한 안정적인 종속성 관리
  • 인라인 메타데이터 지원으로 스크립트 직접 실행 가능
  • Rust/Python 없이도 설치 가능 (단일 바이너리)
  • ✅ macOS, Linux, Windows 모두 지원

🔑 설치 및 기본 사용법

운영체제별 설치

💻 macOS / Linux

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

🖥 Windows

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

🐍 PyPI

pip install uv

가상환경 생성

uv venv .venv  # .venv 폴더에 가상환경 생성

uv로 만든 가상환경은 pip, poetry에서도 사용할 수 있으며, 생성 속도는 일반 venv에 비해 체감상 매우 빠르다.

패키지 설치

uv pip install pytest

기존 pip install 앞에 uv만 붙이면 되니 굉장히 간단하며,
속도는 pip과 비교하기 어려울 정도로 빠르다.

🌌 적용

✅ requirements.txt 예시

polars==1.26.0
pandas
matplotlib
streamlit
argparse
pure-python-adb

🐢 기존 pip 설치 코드

# 기존 pip 설치 코드 예시입니다.

from subprocess import check_call
from sys import executable
import os

REQUIREMENTS_FILE = "requirements.txt"

def install_with_pip():
    print("📦 pip로 requirements.txt 설치 중...")
    check_call([executable, "-m", "pip", "install", "-r", REQUIREMENTS_FILE])

def install_requirements():
    if not os.path.exists(REQUIREMENTS_FILE):
        print(f"❌ '{REQUIREMENTS_FILE}' 파일이 존재하지 않습니다.")
        return

    try:
        install_with_pip()
        print("🎉 모든 필수 패키지 설치 완료!")
    except Exception as e:
        print(f"❌ pip 설치 중 오류 발생: {e}")

if __name__ == "__main__":
    print("🔍 requirements.txt 기반 라이브러리 설치 확인 중…")
    install_requirements()

⚡ uv를 활용한 개선 코드

# uv를 활용한 설치 코드입니다. uv가 설치되어 있지 않으면 자동으로 설치합니다.

from subprocess import check_call
import shutil
import os

REQUIREMENTS_FILE = "requirements.txt"

def is_uv_available():
    return shutil.which("uv") is not None

def install_uv():
    print("📥 uv가 설치되어 있지 않아 설치를 진행합니다...")
    check_call(["pip", "install", "uv"])

def install_with_uv():
    print("⚡ uv로 requirements.txt 설치 중...")
    check_call(["uv", "pip", "install", "--system", "-r", REQUIREMENTS_FILE])

def install_requirements():
    if not os.path.exists(REQUIREMENTS_FILE):
        print(f"❌ '{REQUIREMENTS_FILE}' 파일이 존재하지 않습니다.")
        return

    if not is_uv_available():
        install_uv()

    try:
        install_with_uv()
        print("🎉 모든 필수 패키지 설치 완료!")
    except Exception as e:
        print(f"❌ uv 설치 중 오류 발생: {e}")

if __name__ == "__main__":
    print("🔍 requirements.txt 기반 uv 라이브러리 설치 확인 중…")
    install_requirements()

⚖️ 속도 비교

설치 방식설치 시간
pip44.99초
uv2.90초

약 15배 이상 빠른 설치 속도

또한, 대용량 프로젝트나 반복적인 설치가 필요한 환경에서는 uv가 더 큰 이점을 제공합니다.

🧾 마무리

uv는 단순한 패키지 설치 도구를 넘어, Python 프로젝트 전반의 종속성 관리, 빌드, 배포까지 아우르는 통합 솔루션입니다. 특히 기존 pip 대비 월등한 속도와 효율성을 제공하며, 범용 잠금 파일과 작업 공간 지원으로 복잡한 프로젝트 환경에서도 안정적인 관리가 가능합니다.

직접 사용해보며 기존 툴과의 차이를 체감해보시길 추천합니다.
Python 패키지 관리에 있어 새로운 대안으로 충분한 가치를 가진 도구라고 생각합니다.

profile
주니어 개발자입니다.

0개의 댓글