python uv 엄청 빠른 package, project manager
목차
uv
uv는 엄청 빠른 Python의 패키지(Package), 프로젝트(Project) 매니저입니다. 이전에는 Poetry, PDM을 썼었는데, 현재는 uv만 사용하고 있습니다. 공식 문서에서도 가장 먼저 언급하는게 Extreamly Fast입니다. 속도 맛을 보니 다른 것은 못쓰겠더군요. Ruff를 만든 Astral에서 만들었습니다. uv도 Rust로 만들어졌습니다. 그래서 아주 빠른가봅니다. 이번 포스팅에서 uv 사용법에 대해서 간단하게 다뤄보겠습니다.
uv는 현재 2024년 10월 30일 기준으로 0.4.28
버젼입니다. 업데이트가 매우 빠르게 이루어지고 있습니다. 새로운 기능과 개선사항이 지속적으로 추가되고 있습니다.
uv 설치
uv 설치는 공식문서에 잘 나와있습니다.
위 링크에서 안내하는대로 설치하면 되고 Mac에서는 brew install uv
로 설치하면 됩니다.
uv 사용법
uv에 기능이 다양하게 많고 명령어 마다 옵션이 많습니다. 이번 포스팅에서는 uv로 django 프로젝트를 시작하는 방법을 알아보도록 하겠습니다.
uv init
uv init
으로 프로젝트를 생성할 수 있습니다. 몇 가지 선택지가 있습니다.
uv init
만 쳐서 프로젝트를 생성할 수 있습니다. 그럼 현재 위치에서 프로젝트가 현재 파이썬 버젼으로 생성됩니다.- 그 다음은 아주 유용한 기능 중에 하나라고 생각하는데요. python version을 선택할 수 있습니다. 제 컴퓨터에 python 3.13과 3.12가 모두 설치되어 있고 기본은 3.13입니다. 3.12 버젼으로 프로젝트를 하고 싶다면 다음과 같이 하면 됩니다.
# python 3.12가 설치되어 있어야 함
uv init -p 3.12
- 프로젝트명을 설정하고 싶다면 다음과 같이 이름을 추가해주면 됩니다.
# practice라는 디렉토리가 생성되고 그 안에 프로젝트가 생성됨
uv init practice
uv add
다른 툴들과 비슷하게 add
명령으로 설치합니다. uv add
로 설치해보면 아시겠지만 굉장히 빠릅니다.
uv add django
속도가 보이시나요. 엔터를 치자마자 설치가 끝났습니다.
개발용 의존성을 설치할 때는 --dev
를 추가하면 됩니다.
uv add pytest --dev
이렇게 설치하면 다른 툴들과 마찬가지로 pyproject.toml
과 uv.lock
파일에 자동으로 입력됩니다.
추가로 가끔 라이브러리를 설치하다보면 추가 옵션이 붙는 경우가 있습니다. 예를들면 다음과 같습니다.
# pip 사용시
pip install "uvicorn[standard]"
위와 같은 상황에 “uvicorn[standard]”
따옴표로 감싸서 설치를 하는데 이런 경우 uv에서는 다음과 같이 할 수 있습니다.
uv add uvicorn --extra standard
uv sync
uv sync
는 uv.lock
파일을 읽어서 의존성 설치를 합니다. 다른 사람이 만든 프로젝트를 내 로컬로 가져와서 의존성을 설치할 때 유용합니다. uv sync
를 하는데 가상환경이 없다면 가상환경이 자동으로 생성됩니다.
uv sync
dev
의존성을 설치하지 않으려면 --no-dev
를 추가하면 됩니다.
uv sync --no-dev
uv run
uv run
은 말 그래도 무엇인가 실행할 때 사용하는 명령어 입니다. uv run
명령어를 통하면 uv에서 정의된 프로젝트 환경을 자동으로 설정하고 입력된 명령이 실행됩니다. 이 말은 굳이 가상환경을 activate할 필요가 없다는 뜻이기도 합니다.
다음과 같이 실행할 수 있습니다.
# django project 시작하기
uv run django-admin startproject practice .
# django 서버 실행하기
uv run manage.py runserver
uv pip
uv pip
는 우리가 알고 있는 pip를 uv로 실행하는 것입니다. 대신에 uv pip
로 설치하면 pyproject.toml
과 uv.lock
은 변동되지 않습니다. 가상환경에만 설치됩니다.
uv pip install fastapi
여전히 속도는 엄청 빠릅니다. 프로젝트에 추가할 것은 아니지만 잠시 설치해서 테스트해보고 싶을 때 이렇게 설치하면 되지 않을까 생각합니다.
uv export
마지막으로 uv export
입니다. requirements.txt
를 만드는 것은 프로젝트 관리에서 중요한 부분인데요. 다음과 같이 만들 수 있습니다.
# requirements.txt에 의존성을 기록하는데 hash값 없고 dev는 제외
uv export -o requirements.txt --no-hashes --no-dev
# requirements-dev.txt에 의존성을 기록하는데 hash값도 있고 dev도 포함
uv export -o requirements-dev.txt
마무리
일단 이 정도만 알고 있으면 프로젝트를 진행하는데 필요한 간단한 명령어는 익힌 것이라고 생각합니다. 공식 문서도 잘 만들어져있어서 학습하기도 편리합니다. 더 많은 기능들은 공식 문서에서 공부해야 합니다. 다만 아직 0.4 버전대라서 없는 것들도 좀 있습니다. 예를 들면, 커스텀 명령어..? 하지만 개발이 활발하게 이루어지고 있어서 더 기대가 됩니다.