빠르고 현대적인 Python 프로젝트/패키지 매니저임.
Python 가상환경과 의존성 설치를 매우 빠르게 처리할 수 있도록 만든 CLI 툴로 빠르고 효율적인 패키지 관리자라고 보면 됨.
uv를 사용하려면 설치를 해야함.
# macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows.
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# pip.
pip install uv
# Homebrew.
brew install uv
기타 다른 설치법은 공식문서 참고
https://docs.astral.sh/uv/getting-started/installation/#shell-autocompletion
터미널에 uv를 쳤을때 이렇게 나오면 설치가 잘 되어 사용할 준비가 된 것임.

uv를 사용하는 방법은 크게 두가지가 있음.
1. 개별로 프로젝트 생성 후 venv, pip만 uv로 관리하기
2. uv자체에서 프로젝트를 생성하기
-> 이건 기존에 사용하던 pip, venv와 같은 개념으로 사용할 수 있음.
uv pip install은 기존 pip install과 명령어는 거의 동일하지만, 속도와 효율성에서 큰 차이를 보임. 호환성은 유지하면서 성능을 대폭 개선한 버전이라고 볼 수 있음.
주요 차이점 : 속도 (가장 큰 차이)
uv pip install:
기존 pip install:
pip과 사용법이 거의 유사함.
터미널에서 가상환경 생성 후, 활성화, 필요한 패키지 설치하면 됨
#가상환경 설정
uv venv 가상환경이름(이름을 설정하지 않으면 .venv로 설정됨)
#가상환경 활성화
source venv/Scripts/activate
#필요한 패키지 설치
uv pip install request
#가상환경 비활성화
deactivate
종속성 패키지들을 공유하려면 원래 쓰던데로 requirements.txt 해도 되고,
#requirements.txt생성
uv pip freeze > requirements.txt
#requirements.txt 읽고 설치하기
uv pip install -r requirements.txt
uv에서 많이 쓰는 pyproject.toml로 만들어서 공유해도 됨.
pyproject.toml로 공유받은 패키지목록은
uv sync 로 동기화 할 수 있음.
# pyproject.toml 작성 예시
[project]
name = "uvp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"django>=5.2.2",
"numpy>=2.3.0",
"pandas>=2.3.0",
]
venv, pip 만 써봤던 초보에게는 새로운 개념이라 이해가 조금 필요했는데, 한번 써보니까 아주 편리하고 빨랐음.
#프로젝트 생성 (프로젝트 이름 : example)
uv init example
#example 폴더로 이동
cd example
#request 패키지 추가
uv add request
#ruff를 개발환경에만 추가
uv add --dev ruff
#종속성 잠금
uv lock
#종속성 통일(설치)
uv sync
uv init으로 프로젝트를 생성하면 다음과 같은 폴더구조가 자동 생성 됨
example/
├── pyproject.toml # 프로젝트 설정 파일
├── README.md
├── main.py
└── .python-version # Python 버전 지정
venv도 자동으로 생성되며, 따로 활성화 해줄 필요없이 사용하면 됨.
팀원과 개발환경 맞출때는 깃허브에 커밋할 때 [pyproject.toml, uv.lock] 함께 커밋 후 풀 받아서 uv sync만 하면 됨.
개발도중 새로운 패키지가 추가됐을 때도, 해당 파일들을 커밋, 푸쉬 해주면, 다른 팀원이 풀 받아서 uv sync만 하면 됨.
requirements.txt 하나만 주고받았어도 되는데 주고받을 파일이 두개가 됨
공부한 부분까지는 아주 편리하고 빨라진것 같아서 uv를 활용해서 프로젝트 하나 진행해봐야겠음.