파이썬 패키지 관리자 중 하나로써 사용할 패키지를 쉽게 추가, 제거 해주고
어떤 패키지가 있는지 그 패키지가 몇 버전인지 알려주는 도구이다.
또한 uv를 사용하면 파이썬에 버전을 쉽게 바꿀 수 있다.
1. 패키지 다운로드가 빠르다.
우선 첫 번째 이유로는 패키지를 다운로드 받을 때 pip와 다르게 uv는 병렬적으로 다운로드를 받기 때문이다.
두 번째, uv는 이미 다운로드한 패키지를 로컬 캐시에 저장하고 재사용하기 때문이다.
그 외에도 패키지 중복 설치를 피하고 웬만해선 이미 컴파일 된 바이너리(Wheel)를 사용하는 등 다양한 이유가 있다.
2. 가상환경 통합 관리가 된다.
os와 상관없이 같은 명령어로 관리한다.
프로젝트별로 독립된 가상환경을 사용하기 때문에 패키지 버전 충돌을 방지할 수 있다.
프로젝트 환경을 파일로 내보내고(uv export) 다른 환경에서 그대로 재현(uv import)할 수 있다.
기존 방식과 차이점이 있는데 정확히 무엇이 차이 나는지 모르겠어서 기제하지 않음.
3. 편한 명령어와 직관적인 구조
uv 명령어로
uv list → 설치된 패키지 확인
uv remove <패키지> → 패키지 제거
uv update <패키지> → 패키지 업데이트
등이 있는데 위에 예시와 같이 직관적이고 명령어가 짧다.
또한 pip와 virtualenv를 따로 다루지 않아도 된다.
1. 사용자 커뮤니티 및 자료 부족
pip나 conda와 비교하면 오래되지 않아 사용자 수가 적기 때문에 문제 발생 시 해결을 위한 자료가 부족하다.
복잡한 프로젝트에서는 제한적
대규모 데이터 사이언스 환경이나 conda 환경처럼 여러 언어(Python + R + C 라이브러리 등)를 함께 관리하는 경우에는 기능이 제한적이다.
생태계 호환성
일부 패키지는 pip에서 설치할 때와 다르게 오류가 발생할 수 있다.
특히 OS 의존적인 빌드 패키지(예: torch, tensorflow 일부 버전)에서 문제가 발생할 수 있다.
UV는 처음 프로젝트를 초기화하면 나오는 파일들이 있다.

.venv에는 설치받은 라이브러리들과 현재 실행되는 파이썬 버전이 나와있다.

리눅스, macOS에서는 .venv 안에는 bin폴더가 있다. 이 안에는 파이썬의 버전이 있다.

허나 Windows에서는 bin폴더가 없고 Scripts 폴더가 추가 된 것을 볼 수 있다.
이것으로 알 수 있는 사실은 uv가 자동으로 만드는 .venv도 OS별로 다르다는 것이다.

python-version은 파일 안에 써져 있는 버전대로 실행된다.
허나 uv.lock과 pyproject.toml에 있는 requires-python = ">=파이썬 버전"을 알맞게 고쳐야한다.

pyproject.toml은 사람이 보게 간단하게 만든 명세서 같은 것 이다.

uv.lock은 구체적인 설치 정보가 적혀있는 프로그램용 명세서이다.
위에서 말했듯이 pyproject.toml와 uv.lock는 명세서이다.
허나 .venv폴더에도 같은 정보가 있는데 왜 pyproject.toml와 uv.lock를 사용할까?
그 이유는 pyproject.toml와 uv.lock는 .venv 폴더에 비해 text로 적었기 때문에 용량이 작고 또한 pyproject.toml와 uv.lock에 있는 환경을 다른 사람도 재현할 수 있어 효율적으로 프로젝트를 공유할 수 있기 때문이다.

uv init: 새로운 파이썬 프로젝트를 생성하고 초기화한다.
uv add: 프로젝트의 패키지나 라이브러리를 추가한다.
uv pip install: uv add와 같이 패키지나 라이브러리를 추가하지만 pyproject.toml와 uv.lock는 추가 되지 않아 잠깐 테스트를 하거나 임시로 써볼 때 사용한다.
uv remove: 프로젝트의 패키지나 라이브러리을 삭제한다.
uv sync: 프로젝트의 종속성을 환경과 동기화한다.
uv lock: 프로젝트의 종속성에 대한 잠금 파일을 생성한다.
uv run: 프로젝트 환경에서 명령어를 실행한다.
출처:
https://namu.wiki/w/uv(python)