[Python] 패키지 매니저: uv

uv는 가장 근래에 나온 Python 패키지 매니저 중에 좀 힙하면서도 쓸만한 축에 속하는 녀석이다.
2024년에 나왔고, Rust로 만들어졌다.

보통 이런 것들은 반짝 떴다가 사라지는 경우가 많은데, 기존 파이썬의 패키지 매니저들이 심각하게 구렸던 것에 비해서 개선이 좀 확실하다보니, 도입 사례가 꽤 많은 것 같더라.

node.js의 npm, rust의 cargo와 비슷한 사용성을 제공하는게 특징이다.
성능적으로도 그렇고, 인체공학성 또한 나쁘지 않은 축에 속한다.

의존성 resolver가 잘 최적화되어있어서 실제로 다른 패키지 매니저로 몇분씩 걸리는 것도 uv로는 초단위로 처리되는 경우가 흔한 편이다. 벤치마크 성능이 아니라 일반적인 경우의 체감 성능도 그렇다.




설치

mac이나 linux 같은 유닉스 기반에서는 터미널 명령어 하나로 설치할 수 있다.

curl -LsSf https://astral.sh/uv/install.sh | sh

windows에서는 파워쉘을 통해서 설치할 수 있다.

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"



Python 관리

uv는 python을 직접 제어할 수 있게 하는 기능을 제공한다.
python의 특정 버전을 직접 설치하거나, multi-version 설치도 그냥 된다.

이런 식으로 말이다.

그렇게 설치된 python 버전들은 uv를 통해서 관리된다.





프로젝트 초기화

uv init 명령을 사용하면 바로 폴더를 만들고 프로젝트 기본 구조를 초기화해준다.

uv init 프로젝트명

그럼 이런 식으로 코드가 구성되고

그 외의 매니페스트 파일도 추가된다.

이건 실행할때 사용할 파이썬 버전을 명시한다.


pyproject.toml은 프로젝트명과 의존성 등을 관리한다.
뭔가 설치를 하면 여기에 계속 목록이 쌓일 것이다.


빌드를 한번이라도 한다면 .env와 lock 파일도 함께 생성된다.
uv.lock은 nodejs의 package-lock.json과 rust의 cargo.lock과 동등한 의존성 관리 파일이다.

둘 다 직접 신경쓸 필요는 별로 없다.




실행

실행할 엔트리포인트 파일을 넘기면서 uv run 명령을 사용하면 바로 실행을 한다.

이 과정에서 필요한 의존성이나 자잘한 것들은 자동으로 처리해준다.




모듈 설치

모듈을 추가로 설치하고 싶다면 add를 사용하면 된다.

uv add 모듈명

그러면 toml 파일에도 의존성이 추가되고

lock 내의 의존성 트리에도 뭐가 잔뜩 생긴다.

이 상태로 그냥 import해서 사용하면 그만이다.

신경쓸 것은 별로 없다.



참조
https://docs.astral.sh/uv/guides/install-python/