UV를 활용한 파이썬 개발 워크플로우 혁신하기
(youtube.com)"uv: Making Python Local Workflows FAST and BORING in 2025" 영상 요약
이 영상은 Python 패키징 도구 uv 를 사용하여 로컬 개발 워크플로우를 빠르고 효율적으로 만드는 방법에 대한 두 번째 파트입니다. 주요 요점은 다음과 같습니다.
1. uv
핵심 명령어 활용
-
uv run
:pyproject.toml
에 정의되고uv.lock
파일에 고정된 의존성을 사용하여 가상 환경 내에서pytest
나fastapi
같은 명령어를 실행합니다. -
uv add
: 새로운 의존성을pyproject.toml
에 추가하고uv.lock
파일을 자동으로 업데이트합니다. -
uv run --with
: 프로젝트의 핵심 의존성에 추가하지 않고pdbpp
와 같은 개발용 헬퍼 모듈을 일시적으로 주입하여 사용할 수 있습니다. -
uv lock --upgrade
: 의존성 잠금 파일을 매우 빠른 속도로 업데이트합니다.uv run
은 실행 시 자동으로 변경된 잠금 파일을 감지하고 환경을 동기화합니다.
2. just
를 이용한 워크플로우 표준화
-
uv
에는hatch
나pdm
처럼 사용자 정의 명령어를 정의하는 기능이 내장되어 있지 않습니다. - 영상에서는
Makefile
의 단점(플랫폼 종속성, 비표준 문법 등)을 지적하며, 대안으로 Rust로 작성된 명령어 실행기(just
)를 강력히 추천합니다. -
justfile
을 사용하여 다음과 같은 반복적인 작업을 레시피(recipe)로 표준화합니다.-
test
: 테스트 실행 (인자 전달 가능) -
cov
: 테스트 커버리지 확인 -
serve
: 개발 서버 실행 -
checkall
: 린트, 타입 체크 등 모든 검사를 한 번에 실행
-
3. just
와 uv
의 연동
-
.env
파일:just
는.env
파일을 읽어 환경 변수를 설정할 수 있습니다. 이를 이용해uv run
에--with
인자를 동적으로 추가하거나 서버 포트를 변경하는 등 유연한 워크플로우를 구성할 수 있습니다. -
uvx
(uv tool run):pipx
처럼 프로젝트와 독립적으로 PyPI 패키지를 실행하는 명령어입니다.just
레시피 안에서httpie
같은 도구를 프로젝트 의존성에 추가하지 않고 사용할 수 있습니다.
4. 가상 환경 직접 관리 (선택적 워크플로우)
-
uv run
을 통하지 않고 전통적인 방식으로 가상 환경(.venv
)을 활성화해서 사용하려는 개발자를 위한 방법입니다. -
uv sync
:uv.lock
파일과.venv
폴더의 상태를 동기화합니다. (의존성 설치 및 불필요한 패키지 제거) -
direnv
: 특정 디렉터리에 들어갈 때.envrc
스크립트를 자동으로 실행해주는 셸 도구입니다. 이를 활용하여 디렉터리 진입 시 자동으로uv sync
를 실행하고 가상 환경을 활성화할 수 있습니다.
결론
uv
의 속도와 just
, direnv
같은 도구를 결합하면, 의존성 관리 및 명령어 실행을 자동화하고 표준화하여 개발자가 핵심 로직에 더 집중할 수 있는 "빠르고 지루한(boring)", 즉 매우 안정적이고 예측 가능한 개발 환경을 구축할 수 있습니다.