• 티스토리 홈
  • 프로필사진
    Cat_Code
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Cat_Code
  • 프로필사진
    Cat_Code
    • 분류 전체보기 (115)
      • [네이버 부스트캠프] (46)
        • ⭐주간 학습 정리 (43)
        • 🎶추가 학습 정리 (3)
      • [연습의 흔적들] (27)
        • 백준⚾ (26)
        • 캐글 & 데이콘 🤝 (1)
      • [ML] (23)
        • 머신러닝 💕 (5)
        • 딥러닝 🔫 (10)
        • 데이터 분석 🖤 (1)
        • 수학 ☑️ (4)
        • LLM🦜 (3)
      • [CS] (15)
        • 파이썬 🖤 (11)
        • 해체 분석기📝 (3)
        • Service Product (1)
        • MultiMedia (0)
      • [개발일지] (2)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • uv, 파이썬 패키지 관리의 신세카이
        2025년 05월 15일
        • Cat_Code
        • 작성자
        • 2025.05.15.:00

        0. 들어가며

        기존 파이썬 패키지들을 관리하는 관리자에는 pip , poetry, virtualen, pyenv 등이 있다.

        하지만 대부분의 패키지 관리자들은 Python으로 개발 되었다.

        물론 이러

        한 특성들 때문에 쉽고 확장성이 있다는 장점이 있지만, 인터프리터 언어의 특성상 실행 속도가 느리고 대용량의 파일 처리나 병렬 작업에는 성능한계가 있다.

         

        이러한 단점을 보완하여 속도를 높이기 위해서 uv라는 파이썬 패키지 관리자가 등장하였다.

        uv는 Rust로 개발 되었기 때문에 기존의 파이썬 패키지 관리자 보다 빠른 속도를 보여준다.

        파이썬 패키지 관리자 속도 비교

        이번 글에서는 uv의 특징을 살펴보고, 설치법과 간단한 사용법 그리고 활용 방법에 대해서 살펴볼 것이다.


        1. uv의 특징

        uv github 저장소 : https://github.com/astral-sh/uv

         

        GitHub - astral-sh/uv: An extremely fast Python package and project manager, written in Rust.

        An extremely fast Python package and project manager, written in Rust. - astral-sh/uv

        github.com

         

        1.1 개발 언어 - Rust

        uv는 최근들어서 급격하게 관심을 받고 있는 파이썬 패키지 관리자 이다.

        Rust로 구현이 되었기 때문에 기존 파이썬 패키지 관리자들 보다 속도 면에서 매우 빠르다

         

        기존, pip, poetry, pip-tools는 내부에서 여러번의 Python 인터프리터를 실행했어야 했다.

        따라서 이라한 구조 때문에 속도에 제한이 있었다.

         

        하지만 uv의 경우 Rust로 구현이 되었기 때문에 Python 인터프리터 호출을 최소화 한다. 이를 통해서 빠른 속도라는 장점을 가질 수 있게 되었다.

         

        1.2 병렬 처리

        uv는 기본적으로 병렬처리를 활용한다.

        이를 통해서 여러 패키지를 한번에 다운로드 받거나 여러 작업을 동시에 수행해야하는 경우 빠르게 처리할 수 있다.

         

        물론 기존의 pip도 병렬처리를 지원은 하지만 기본 값은 아니며 `--jobs` 옵션을 추가해주어야한다.

         

        1.3 캐시 최적화

        uv는 다운로드한 아카이브와 메타데이터를 고도로 캐싱하여 재설치시 빠르게 처리한다.

        pip도 캐시를 사용하지만, pip의 경우 주로 다운로드 파일 재사용에 집중을 하여 사용한다.

        즉, 단순히 다운로드한 파일을 재사용하는 수준이다.

         

        uv의 경우 다운로드 뿐만아니라, 빌드된 wheel, 의존성 해석 까지 모두 캐시에 저장해둔다.

        이를 통해서 동일한 결과가 들어오면 빠르게 캐싱하여 설치 속도를 극대화 한다.

         

        이를 통해서 pip보다 80~115배 빠른 속도를 보이며 CI/CD 환경에서 설치 시간과 비용을 아끼는데 활용할 수 있다

         

        1.4 패키지 의존성 해석 및 처리 속도

        uv는 pyproject.toml이나 requirements.txt 를 매우 빠르게 파싱할 수 있으며, 의존성 해결에도 효율적으로 작동한다.

        이는 기존 pip, poetry 보다 더 빠른 속도를 보인다.

        또한 macOS, Linux, Windows등 다양한 운영체제에서 동일한 환경과 락파일을 유지할 수 있다.

         


        2. uv 설치 방법

        2.1 Linux/WSL

        curl -Ls https://astral.sh/uv/install.sh | sh
        • $HOME/.cargo/bin/uv 또는  $HOME/.local/bin/uv 에 설치가 된다
        • 설치후 uv --version 명령어로 확인할 수 있다.
        • 만약 Rust가 있다면 수동으로도 설치가 가능하다
        cargo install uv

         

        2.2 macOS

        brew install astral-sh/tap/uv

        brew를 사용해서 설치를 하거나

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

        직접 설치를 하면된다.

         

        2.3 Windows

        irm https://astral.sh/uv/install.ps1 | iex
        • 설치 경로: %USERPROFILE%\\.cargo\\bin\\uv
        • 이후 환경 변수에 해당 경로가 포함되어 있는지 확인

        3. uv 기본 명령어 및 사용법

        사용은 기존 pip처럼 사용하면된다

        uv <서브커맨드> [옵션]

        3.1 패키지 설치

        uv pip install <패키지명>
        uv pip install -r requirements.txt

        3.2 패키지 제거

        uv pip uninstall <패키지명>
        uv pip list
        uv pip freeze > requirements.txt

        3.3 의존성 고정 (pip-tools 대체)

        uv pip compile pyproject.toml
        • pyproject.toml → requirements.txt 생성
        • pip-compile과 같은 역할을 훨씬 빠르게 수행

        3.4 가상환경 만들기 (venv 대체)

        uv venv <디렉토리명>
        source <디렉토리명>/bin/activate  # 또는 .\디렉토리명\Scripts\activate (Windows)
        • python -m venv 대신 사용 가능
        • 원하는 Python 버전 지정도 가능 (예: -python python3.11)

        3.5 캐시 관리

        uv cache dir     # 캐시 디렉토리 확인
        uv cache clear   # 캐시 삭제

         

        3.6 추가 명령어 정리

        uv init 📁 새 프로젝트 초기화→ pyproject.toml, .gitignore, .venv 등 기본 파일 자동 생성
        uv add ➕ 패키지 설치 및 pyproject.toml + uv.lock에 반영예: uv add requests
        uv remove ➖ 패키지 제거 및 pyproject.toml + uv.lock 갱신예: uv remove requests
        uv sync 🔄 uv.lock 기반으로 현재 가상환경을 동기화함→ 버전 충돌 없이 정확히 맞춰줌
        uv lock 🔐 uv.lock 파일 생성 및 갱신 (의존성 고정)→ pip-compile 역할
        uv venv 🐍 가상환경 생성 및 관리→ python -m venv보다 더 빠르고 유연
        uv python 🧪 다양한 Python 버전 설치 및 전환→ pyenv 없이도 작동 가능
        uv run ▶️ Python 스크립트 실행→ 필요한 Python 버전이나 패키지가 없다면 자동 설치
        uv export 📤 uv.lock → requirements.txt 등으로 변환 가능→ Docker나 CI에 사용하기 좋음
        uv tree 🌳 의존성 트리 시각화→ 어떤 패키지가 무엇을 의존하는지 명확히 확인
        uv tool 🛠 CLI 도구 설치 (예: black, pytest, ruff) + 실행→ 개발용 도구 관리 전용
        uv cache 💾 캐시 디렉토리 확인/삭제 등→ 설치 속도 최적화를 위한 캐시 관리
        • uv는 pyproject.toml 중심으로 동작을 하기 때문에 poetry 대체로 쓰기가 좋다.
        • 락파일은 uv.lock 이며, uv export로 requirements.txt 등 다른 형식으로 변환이 가능하다.
        • uv tool 은 CLI 툴을 격리된 환경에 설치하기 때문에 글러벌 충돌이 없다

        4. uv 활용법 (Docker, CI/CD)

        uv를 활용하여 빌드 시간을 크게 단축시킬 수 있다.

        특히 Docker나 CI/CD에서 uv는 기존의 pip보다 빠르게 작동하여 시간적인 측면이나 비용적인 측면에서 효율성을 제공해준다.

        4.1 Dockerfile에서 uv 사용하기

        # Dockerfile
        FROM python:3.11-slim
        
        # uv 설치
        RUN curl -Ls https://astral.sh/uv/install.sh | sh
        
        # 작업 디렉토리
        WORKDIR /app
        
        # 의존성 파일 복사
        COPY pyproject.toml uv.lock ./
        
        # 패키지 설치
        RUN ~/.cargo/bin/uv sync --python python3.11
        
        # 소스 복사
        COPY . .
        
        # 실행
        CMD ["~/.cargo/bin/uv", "run", "main.py"]

        ✅ 포인트:

        • uv.lock이 있다면 빠르게 재현 가능한 설치 가능
        • uv sync는 락파일 기반 정확한 환경 구축

        4.2 Github Action에서 uv 사용

        name: CI
        
        on: [push, pull_request]
        
        jobs:
          test:
            runs-on: ubuntu-latest
        
            steps:
            - uses: actions/checkout@v3
        
            - name: Set up Python
              uses: actions/setup-python@v4
              with:
                python-version: '3.11'
        
            - name: Install uv
              run: curl -Ls https://astral.sh/uv/install.sh | sh
        
            - name: Install dependencies
              run: ~/.cargo/bin/uv sync
        
            - name: Run tests
              run: ~/.cargo/bin/uv run pytest

        ✅ 포인트:

        • CI에서도 pip install보다 훨씬 빠름
        • 락파일 기반으로 항상 동일한 테스트 환경 보장

        '[CS] > 파이썬 🖤' 카테고리의 다른 글

        [직접 구현하는 머신러닝] K- 평균 (K-Means)  (1) 2023.11.20
        GIL  (0) 2023.07.25
        [CS & Python] Python 동시성에 대한 Reference 정리  (0) 2023.06.24
        [파이썬 - 알쓸신잡] 왜 Dict는 List 보다 빠를까?  (0) 2023.06.12
        [CS]CPU bound vs. I/O bound  (0) 2023.06.08
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바