uv 가상환경 파이썬 생태계에서 최근 가장 주목받는 도구인 uv 는 Rust로 작성되어 기존의 pip나 poetry보다 훨씬 빠른 속도를 자랑합니다. 설치부터 가상환경 생성까지의 과정을 핵심만 정리해 드릴게요.
1. uv 설치하기 운영체제에 따라 터미널(또는 CMD)에서 아래 명령어를 입력하세요.
macOS / Linux 1 2 curl -LsSf https://astral.sh/uv/install.sh | sh
Windows PowerShell을 열고 아래 명령어를 실행하세요.
1 2 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Tip: 설치가 완료된 후 터미널을 껐다 켜거나 source $HOME/.cargo/env (Unix 기준)를 실행해야 uv 명령어가 인식됩니다.
2. 가상환경 생성 및 활성화 uv는 프로젝트 단위의 워크플로우를 권장합니다.
프로젝트 초기화 (권장) 새 프로젝트 폴더를 만들고 uv 설정을 초기화합니다. 이 과정에서 .venv 가상환경이 자동으로 준비될 준비를 마칩니다.
1 2 3 4 mkdir my-projectcd my-projectuv init
가상환경 직접 생성 특정 버전을 지정하거나 직접 가상환경을 만들고 싶을 때 사용합니다.
1 2 3 4 5 6 uv venv uv venv --python 3.12
가상환경 활성화 생성된 .venv 폴더 안의 스크립트를 실행합니다.
macOS / Linux: source .venv/bin/activate
Windows: .venv\Scripts\activate
3. 패키지 설치 및 관리 uv의 진가는 패키지 설치 속도에서 나타납니다.
패키지 추가: uv add requests (자동으로 pyproject.toml에 기록됨)
패키지 삭제: uv remove requests
전체 동기화: uv sync (프로젝트 설정에 맞게 환경을 일치시킴)
uv add uv에서 현재 프로젝트의 패키지를 최신 버전으로 업그레이드하는 방법은 매우 간단하고 직관적입니다.
상황에 따라 아래의 명령어 중 하나를 선택해 사용하시면 됩니다.
1. 특정 패키지만 하나씩 업그레이드할 때 (uv add) 기존에 설치된 특정 패키지를 최신 버전으로 올리고 싶다면, 패키지를 처음 설치할 때와 동일하게 uv add 명령어를 사용하되 --upgrade 옵션을 붙여주면 됩니다.
1 2 uv add --upgrade requests
결과: requests 패키지가 최신 버전으로 업데이트되며, 이와 연동된 pyproject.toml과 uv.lock 파일이 자동으로 갱신됩니다.
2. 프로젝트의 모든 패키지를 한꺼번에 업그레이드할 때 (uv lock --upgrade) pyproject.toml에 적힌 허용 범위 내에서 모든 의존성 패키지를 한 번에 최신 버전으로 끌어올리고 싶을 때 사용합니다.
1 2 3 4 5 6 uv lock --upgrade uv sync
결과: 모든 패키지의 최신 버전 조합을 다시 계산하여 uv.lock을 바꾸고, uv sync를 통해 내 가상환경을 완전히 최신 상태로 바꿉니다.
3. 만약 기존 pip 스타일(독립형 venv)을 쓰고 계신다면 (uv pip) pyproject.toml 중심의 프로젝트 방식이 아니라, uv venv로 만든 일반 가상환경에서 전통적인 방식으로 패키지를 올리고 싶다면 uv pip install에 -U (또는 --upgrade) 옵션을 주면 됩니다.
1 2 3 4 uv pip install -U requests uv pip install -U -r requirements.txt
💡 보너스 팁: 사용 중인 uv 도구 자체를 업그레이드하려면? 패키지가 아니라 터미널에서 쓰고 계신 uv 명령어 자체 를 최신 버전으로 바꿀 때는 아래 명령어를 치시면 됩니다.
네, 당연히 가능합니다! 기존 프로젝트에서 requirements.txt를 사용 중이었다면, uv는 이를 아주 스마트하게 흡수하여 pyproject.toml 기반의 현대적인 프로젝트로 전환해 줍니다.
상황에 따라 두 가지 방법으로 사용할 수 있습니다.
1. requirements.txt의 내용을 프로젝트 의존성으로 추가하기 기존의 파일 내용을 읽어서 pyproject.toml의 [project.dependencies] 항목에 한꺼번에 등록하고 싶을 때 사용합니다.
1 2 3 uv add -r requirements.txt
작동 방식: uv가 파일을 읽어 패키지 목록을 파악한 뒤, 최적의 버전을 계산하여 pyproject.toml에 기록하고 가상환경에 설치합니다.
2. requirements.txt 파일을 그대로 사용하여 패키지만 설치하기 프로젝트 구조를 바꾸지 않고, 단순히 가상환경에 패키지만 빠르게 깔고 싶을 때 사용합니다. (기존 pip install -r의 초고속 버전이라고 보시면 됩니다.)
1 2 3 uv pip install -r requirements.txt
작동 방식: pyproject.toml은 건드리지 않고, 지정된 가상환경에 패키지만 즉시 설치합니다.
3. uv와 기존 pip의 관리 방식 차이
특징
requirements.txt (기존)
uv / pyproject.toml (현대적)
파일 성격
단순 패키지 나열 리스트
프로젝트 설정 및 메타데이터 포함
의존성 해결
설치 순서에 따라 충돌 가능성 있음
모든 패키지 관계를 계산하여 최적화
잠금 파일
보통 없음 (필요 시 pip freeze)
uv.lock 파일이 모든 버전 고정
💡 유용한 팁: 반대로 내보내기 uv를 사용 중인데, 아직 uv를 쓰지 않는 서버나 동료를 위해 다시 requirements.txt를 만들어야 한다면 아래 명령어를 사용하세요.
1 2 3 uv export --format requirements-txt > requirements.txt
결론적으로:
기존 프로젝트를 uv로 마이그레이션하고 싶다면 uv add -r requirements.txt를 적극 추천합니다. 이렇게 하면 이후부터는 requirements.txt 관리의 고통에서 벗어나 pyproject.toml 하나로 모든 것을 관리할 수 있게 됩니다!
혹시 requirements.txt에 특정 버전이 복잡하게 꼬여 있나요? uv는 그 충돌을 찾는 속도도 굉장히 빠르니 바로 시도해 보세요.
1 $ uv tool install open-webui
Remove unused cache entries:
코드를 사용할 때는 주의가 필요합니다.
Clear the entire cache directory:
코드를 사용할 때는 주의가 필요합니다.
rm -rf “$(uv tool dir)”
powershellRemove-Item -Recurse -Force (uv tool dir)
uv를 사용하다 보면 uvx라는 명령어를 마주하게 됩니다. 결론부터 말씀드리면, uv는 프로젝트의 관리와 패키지 설치 를 담당하고, uvx는 도구를 설치 없이 바로 실행 할 때 사용합니다.
마치 Node.js 생태계의 npm과 npx 관계와 매우 흡사합니다.
1. uv (The Package & Project Manager) uv는 프로젝트의 의존성을 관리하고, 가상환경을 구축하며, 패키지를 설치하는 메인 관리자 입니다.
주요 역할: 패키지 설치, 파이썬 버전 관리, 가상환경 생성, 프로젝트 빌드.
사용 예시:
1 2 3 4 uv add requests uv run main.py uv sync
특징: 프로젝트 폴더 내의 .venv 또는 pyproject.toml과 밀접하게 연동됩니다.
uvx는 ‘uv tool run’의 줄임말로, 특정 파이썬 도구를 설치하지 않고 즉석에서 실행 하고 싶을 때 사용합니다.
주요 역할: 전역적으로 설치하기엔 부담스럽지만, 일회성으로 써야 하는 도구(CLI)를 실행할 때 사용합니다.
작동 방식: 실행 시 임시 가상환경을 만들고, 도구를 다운로드하여 실행한 뒤 종료합니다. (나중에 다시 실행할 때는 캐시된 버전을 사용해 매우 빠릅니다.)
사용 예시: 1 2 3 4 uvx ruff check . uvx cowsay "Hello UV" uvx httpie google.com