
UV는 Rust로 작성된 최신 고성능 파이썬 패키지 관리자다. 기존의 pip 또는 conda를 대체할 수 있도록 설계되었으며, 패키지 설치와 의존성 해결에서 뛰어난 속도를 제공한다. 이는 파이썬 버전에 상관없이 독립적으로 설치 및 사용할 수 있어, 패키지 관리의 복잡성을 줄여준다.
Homebrew
brew install uv
Pip
pip install uv
uv init <프로젝트-제목>
# 이미 프로젝트가 있다면 디렉토리 내에서
uv init
프로제트를 생성하면 .python-version, hello.py, pyproject.toml, uv.lock 파일들이 생성될 것이다.
.python-version : 이를 통해서 파이썬 버전을 관리하면 된다. 예를 들어, 가장 최근에 다운 받은 (글로벌 파이썬) 3.13으로 프로젝트가 생성이 되었는데 3.12를 사용하고 싶다면 3.12로 수정하면 된다.hello.py : 이는 기본 파이썬 템플릿이라 생가하면 되고 딱히 별 의미는 없다. 하지만 바로 지우지는 말고 아래 가상환경 설정 설명을 읽어보고 지우면 된다.pyproject.toml : 이 파일이 코딩 환경을 설정하는데에 핵심이다. 이는 아래에서 추가적으로 설명을 하겠다만 파이썬 버전과 requirements.txt의 역할을 해줄 수 있다.uv.lock : 직접 손댈 필요는 없다.프로젝트 생성 후 아래의 코드를 돌리면 원래 가상환경을 만들 때 사용했던 python3 -m venv .venv 를 자동으로 실행해준다고 보면 된다. 이는 기본으로 생성해주는 hello.py 파일이 아니어도 되지만 이미 있고 간편하기 때문에 아래의 코드를 돌리고 지우도록 하자.
uv run hello.py
이의 원리는 사실 어느 파이썬 파일이든 터미널에서 스크립트를 돌리면 자동으로 .python-version, pyproject.toml, uv.lock 파일들을 참고하여 가상환경을 생성해준다고 보면 된다. 이를 실험해보고 싶다면 hello.py 파일을 지우고 .venv 가상환경도 지운 뒤 아무 파이썬 스크립트를 만들어서 돌려보자.
터미널에서 가상환경에 접속하려면 아래의 코드를 돌리면 된다.
source .venv/bin/activate
그렇다면 username project-directory 에서 (.venv) username project-directory 터미널 프롬트가 바뀌는 것을 볼 수 있을 것이다.
터미널에서 가상환경을 비활성화하려면 아래의 코드를 돌리면 된다.
deactivate
그렇다면 (.venv) username project-directory 에서 username project-directory 터미널 프롬트가 바뀌는 것을 볼 수 있을 것이다.
다시 가상환경에 접속하고 싶다면 가상환경 활성화 코드를 돌리면 된다.
이 부분이 uv의 꽃이라고 생각하면 된다.
Pip 또는 conda에서 용량이 큰 라이브러리를 다운 받을 때 걸리는 시간과 버전이 맞지 않았을 때 복잡한 에러 메시지를 더 이상 경험할 필요가 없다. 사용해보면 체감이 될 것이다.
# 패키지 추가
uv add <패키지-이름==버전>
# 패키지 제거
uv remove <패키지-이름==버전>
가끔가다 패키지 이름에 대괄호로 부가적인 설정을 할 때가 있다 그럴 때는 아래와 같이 해결하면 된다.
# 예를 들어
pip install "fastapi[standad]"
# uv 방법
uv add fastapi --extra standard
--exta 가 큰따옴표와 대괄호의 역할을 대체한다고 보면 된다.
이는 pyprojects.toml 에 자동으로 버전과 함께 기록이 되지만 만약에 uv가 처음이어서 requirements.txt 더 편하다면 터미널에서 아래와 같은 코드를 실행하면 된다.
uv pip freeze > requirements.txt
# requirements.txt에서 패키지를 다운받고 싶다면
uv pip install -r requirements.txt
이 외에도 다른 기능을 확인하고 싶다면 아래의 uv 홈페이지에서 문서를 읽어보자.
https://docs.astral.sh/uv/