uv : Python 패키지 매니저
uv: An Extremely Fast Python Package Manager
파이썬을 사용하다보면 정말 편리하지만 예전부터 항상 거지같던게 패키지 매니징이였다. 파이썬 버전마다 지원안되는 패키지도 많았고 패키지끼리의 의존성관리를 pip 과 requirements.txt 하나도 다 하는건 말도안되고 많이들 쓰는 conda는 너무 무거웠고 번잡스럽다라고 나는 느꼈다. 특히 학부생 때 npm의 강력한 패키지매니징을 보고 나서 파이썬 을 접했기 때문에 더더욱 그랬던거 같다.
그러던 와중 poetry 를 접하였는데 pyproject.toml 을 이용한 자동 패키지 매니징은 신세계였고 그뒤로 무조건 poetry를 통해서만 python 프로젝트를 진행하였다. 그러던 와중 대학원 연구실에서 여러 딥러닝관련 프로젝트를 묶어 fastapi 를 이용하여 rest api를 만들일이 있었는데 프로젝트의 크기가 생각보다 커지고 pytorch 나 tensorflow 같은 패키지가 들어가니깐 처음에 프로젝트 세팅 시에 패키지 설치 때 엄청 느린거다 속도가. 그러다보니 poetry 에 의구심이 들어 다른것들을 조사하다보니 결국 uv에 다다르게 되었다.
사실 uv 찬양은 다른 곳에서도 많이하기에 굳이 글을 쓸필요까지 있나 싶었지만 아직까지도 python 에도 패키지매니저가 있는지 몰랐던 분들을 봐왔기때문에 강조할 겸 또 이렇게 간단히 소개해본다.
uv poetry 비교 속도
cold installation 은 캐시없이 처음 설치하는상황
cold resolution 은 캐시없이 의존성 해결 속도 측정
Rust를 사용해서 그런지 엄청 빠른모습을 보인다. 본인들이 주장하는 성능벤치마크이기에 의심해봐야하는거 아닌가싶기도하지만 실제로 사용해보면 끄덕이는 속도이다.
uv 의 사용법이나 그런거에 대해선 어차피 다른 블로그나 아니면 공식문서만 봐도 크게 어려운내용이 없기때문에 특별히 조금 헷갈릴만한거나 어려운점에 대해서만 다뤄보자면
Pytorch
To start, consider the following (default) configuration, which would be generated by running
uv init --python 3.12
followed byuv add torch torchvision
.
In this case, PyTorch would be installed from PyPI, which hosts CPU-only wheels for Windows and macOS, and GPU-accelerated wheels on Linux (targeting CUDA 12.4)
공식문서에 따르면 보통 설치를하면 windows랑 macos 에선 cpu only 버전을 설치하고 linux에서는 2025.04.18일 기준으로 cuda 12.4에 맞춰 gpu 버전을 설치한다고한다.
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = [
"torch>=2.6.0",
"torchvision>=0.21.0",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", marker = "sys_platform != 'linux'" },
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
torchvision = [
{ index = "pytorch-cpu", marker = "sys_platform != 'linux'" },
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "[https://download.pytorch.org/whl/cpu](https://download.pytorch.org/whl/cpu)"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "[https://download.pytorch.org/whl/cu124](https://download.pytorch.org/whl/cu124)"
explicit = true
이런식으로 맞춰서 설정할 수 있다고한다.