
uv는 Rust로 구현된 차세대 Python 패키지 및 프로젝트 매니저로, pip, pip-tools, pipx 등을 하나의 통합 CLI로 대체할 수 있다. 일단 Rust로 개발 되어서 uv가 기본적으로 기존 도구들에 비해 10~100배 가량 빠를 수 있다.
아마 설계된 목적은 기존 pip 생태계를 대체하기 위해 설계되었다.
여기서는 pip보다 uv가 더 좋은 이유를 설명하기 위해 uv의 특징들을 설명하려고 한다.
pip,pip-tools,virtualenv와 같이 기존에 분리되어 사용되던 도구들을 통합 virtualenv가 가상 환경의 생성만을 ,pip가 패키지 관리만을 담당했지만 uv는 이 두가지를 함께 관리 한다. pip 보다 8~10 배 빨리 의존성 설치
curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# pip
pip install uv
#pipx
pipx install uv
.venv라는 이름의 가상의 환경 디렉토리를 생성함.$ uv venv
Using CPython 3.12.7 interpreter at: C:\Users\rlawl\anaconda3\python.exe
Creating virtual environment at: .venv
Activate with: source .venv/Scripts/activate
uv는 특정 Python 버전으로 가상 환경을 생성하는 것을 지원
uv venv --python 3.12.0
uv pip insatll <package_name>pip와 동일하게 단알 패키지를 설치할 수 있다. uv pip install langchain
Using Python 3.12.7 environment at: C:\Users\rlawl\anaconda3
Audited 1 package in 1.26s
uv add <package_name>pyproject.toml 파일에 의존성을 추가 하고, 해당 패키즈를 가상 환경에 설치한다. uv add langgraph
# (가상 환경이 없다면 생성하고) langgraph 패키지를 설치하며 pyproject.toml에 의존성을 추가한다.
uv sync: uv.lock 파일에 정의된 의존성을 현재 가상 환경에 동기화 한다. 프로젝트의 모든 의존성을 파일에 명시된 버전으로 일관되게 설치하거나 업데이트할 때 사용uv sync
uv initpyproject.toml 파일을 생성하고, 가상환경을 만들 수 있음$ uv init my-project
Adding `my-project` as member of workspace `C:\Users\rlawl\workspace\test`
Initialized project `my-project` at `C:\Users\rlawl\workspace\test\my-project`
uv runuv run python main.py
해당 명령어는 실행하기 전에 프로젝트 환경이 uv.lock파일에 따라 최신 상태인지 자동으로 확인하고 필요한 경우 업데이트를 한다.