uv 파이썬 관리를 위한 툴
목차
uv를 사용하게 된 이유
Python 생태계에서 패키지 관리, 버전 관리, 가상환경 관리, 빌드 도구 등이 파편화되어 있어 pip, poetry, conda, pipenv 등의 유사한 기능을 하는 툴이 너무 많은데 Anthropic, OpenAI를 비롯한 ML 쪽에서 uv 도입 사례가 많아져서 확인하게 되었음
uv 사용법 자체도 쉽기 때문에 금방 적응해서 사용이 가능함
uv의 장점
1) 관리 포인트 감소
- 가상환경 생성, 의존성 관리, Python 버전 관리, 패키징, 포매터/린터 같은 서드파티 도구 실행을 하나의 도구로 처리
- Rust의 Cargo 처럼 Python 환경에서도 uv 하나로 가능하게끔 디자인 되어 있음
2) 성능
- Rust로 작성된 고속 의존성 해석 엔진으로 pip, poetry 대비 10~100배 빠르다는 벤치마크 테스트 결과
- 캐싱과 최적화를 사용하여 대규모 프로젝트에서 빠른 설치 및 업데이트 가능
3) 사용 편의성
- 단순화된 CLI 명령어로 대부분의 작업을 수행
- .venv 나 .python-version 등 자동으로 생성, 관리
uv 사용 방법
1) 설치
- Linux and macOS :
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows :
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
2) 프로젝트 생성 uv init uv_test
명령어를 통해 새로운 프로젝트를 생성
1
2
3
4
5
6
uv_test
├── .python-version
├── .gitignore
├── pyproject.toml
├── hello.py
└── README.md
.python-version 을 통해 python 버전이 고정됨
pyproject.toml 은 의존성 및 프로젝트 메타데이터를 정의함
3) 가상환경 생성 및 활성화
uv venv --python 3.12.0
명령러를 통해 가상 환경을 생성
이때 --python 3.12.0
와 같이 옵션을 부여하면 해당 Python 버전으로 가상환경이 생성됨
source .venv/bin/activate
명령어로 가상환경 활성화
4) 업그레이드
uv self update
명령어를 통해 최신 버전으로 업그레이드
5) 의존성 설치 및 삭제
uv add <패키지명>
나 uv add -r requirements.txt
명령어로 의존성을 추가할 수 있고
uv remove <패키지명>
로 의존성을 제거할 수 있음
- extra로 추가할 경우 :
uv add fastapi --extra standard
사용 - 개발용으로 추가할 경우 :
uv add fastapi --dev
사용 - requirements.txt 생성 방법 :
uv export -o requirements.txt
사용
6) 스크립트 실행
uv run main.py
로 가상환경을 자동 적용하여 스크립트 실행이 가능하고 필요한 의존성을 명시해서 실행도 가능함
7) 가상환경 재생성 및 동기화
uv sync
명령어를 사용해서 pyproject.toml과 uv.lock 파일을 기준으로 가상환경 재생성 및 동기화할 수 있음
8) 서드파티 설치, 실행
uvx <툴>
명령어를 이용해서 드파티 명령을 자동으로 설치, 실행해줌
uv tool run
의 축양형
9) Python 버전 관리
uv python install 3.10 3.11 3.12
로 여러개의 Pythonm 버전 설치 가능