"uv: Making Python Local Workflows FAST and BORING in 2025" 영상 요약

이 영상은 Python 패키징 도구 uv 를 사용하여 로컬 개발 워크플로우를 빠르고 효율적으로 만드는 방법에 대한 두 번째 파트입니다. 주요 요점은 다음과 같습니다.

1. uv 핵심 명령어 활용
  • uv run: pyproject.toml에 정의되고 uv.lock 파일에 고정된 의존성을 사용하여 가상 환경 내에서 pytestfastapi 같은 명령어를 실행합니다.
  • uv add: 새로운 의존성을 pyproject.toml에 추가하고 uv.lock 파일을 자동으로 업데이트합니다.
  • uv run --with: 프로젝트의 핵심 의존성에 추가하지 않고 pdbpp와 같은 개발용 헬퍼 모듈을 일시적으로 주입하여 사용할 수 있습니다.
  • uv lock --upgrade: 의존성 잠금 파일을 매우 빠른 속도로 업데이트합니다. uv run은 실행 시 자동으로 변경된 잠금 파일을 감지하고 환경을 동기화합니다.
2. just를 이용한 워크플로우 표준화
  • uv에는 hatchpdm처럼 사용자 정의 명령어를 정의하는 기능이 내장되어 있지 않습니다.
  • 영상에서는 Makefile의 단점(플랫폼 종속성, 비표준 문법 등)을 지적하며, 대안으로 Rust로 작성된 명령어 실행기(just)를 강력히 추천합니다.
  • justfile을 사용하여 다음과 같은 반복적인 작업을 레시피(recipe)로 표준화합니다.
    • test: 테스트 실행 (인자 전달 가능)
    • cov: 테스트 커버리지 확인
    • serve: 개발 서버 실행
    • checkall: 린트, 타입 체크 등 모든 검사를 한 번에 실행
3. justuv의 연동
  • .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)", 즉 매우 안정적이고 예측 가능한 개발 환경을 구축할 수 있습니다.