Uv
(C로 구현된 비동기 라이브러리는 libuv 참고)
러스트로 구현한 초고속 파이썬 패키징 도구
Features
- uv 패키지 매니저와 PEP 723을 통해 의존성 문제 없이 Python 스크립트 실행이 가능해짐
- uvx 기능은 Disposable 가상환경을 자동 생성하여 환경 설정의 불편함을 해결함
- PEP 723 메타데이터를 Python 파일에 포함하면 스크립트 자동 실행 및 패키지 관리가 편리해짐
- 실행 스크립트 예시로 YouTube 자막 추출 프로그램을 빠르게 구현 및 배포할 수 있음
- 이를 통해 이제 Python도 간결한 단일 실행 파일 작성이 가능해져 스크립트 활용성이 크게 향상됨
Uv의 킬러 기능은 즉석(ad-hoc) 환경을 쉽게 만드는 것
성능이나 Python과의 호환성은 uv의 차별점이 아님. uv는 PEPs를 준수하며, Python의 패키지 관리자로서 추천할 만함. 그러나 가장 놀라운 기능은 따로 있음.
- Python 3.12에서 ad-hoc 스크립팅을 할 때, 종종 Pandas와 같은 의존성을 추가해야 할 때가 있음. 일반적인 방법은 다음과 같음:
-
pip install pandas를 실행하여 전역 환경을 수정하거나 - 가상 환경을 생성하고,
pip install pandas를 실행하고, 가상 환경을 활성화한 후 Python을 실행하는 것임.
-
-
pyenv install 3.12 -
pyenv local 3.12 -
python -m venv .venv -
source .venv/bin/activate -
pip install pandas -
python
-
uv run --python 3.12 --with pandas python - 기억하기 쉽고, 흔적이 남지 않음. 즐거운 스크립팅!
Hacker News 의견
- Uv's killer feature is making ad-hoc environments easy | Hacker News
- uv 패키지 관리자를 매우 좋아하며, 커뮤니티의 표준으로 자리 잡았으면 좋겠다는 의견이 있음. 특히 새로운 사용자들에게 추천할 만한 도구임
- uv는 PEP 723의 인라인 스크립트 종속성을 지원하여 더욱 깔끔한 사용이 가능함
- NodeJS 개발자로서 Python의 환경 설정 문제 해결이 아직도 안 된 것이 놀라움. Node도 완벽하지 않지만, 전역 환경 수정에 대한 걱정은 없음
- virtualenv의 활성화가 불필요하며, pyenv 인터프리터 설정 없이도 직접 가상 환경을 생성할 수 있음
- uv의 단일 도구 실행에 여러 기능이 묶이는 것이 불편하다는 의견이 있음. venv를 활성화하고 여러 번 프로그램을 실행할 수 있는 것이 편리함
- uv는 uvx 명령어를 포함하여 Python 스크립트를 수동 설치 없이 실행할 수 있음
- 예:
uvx --from 'huggingface_hub[cli]' huggingface-cli
- 예:
See also
Favorite site
- uv: Python packaging in Rust
- Uv - 러스트로 구현한 초고속 파이썬 패키징 도구 | GeekNews
- 04.00. uv - 파이썬 관리에 필요한 단 하나의 툴 - 모던 파이썬 프로그래밍
- Python: EP122 - 미친듯이 빠른 uv에 대해 알아보자 - YouTube
- uv와 PEP 723으로 Python 스크립트 활용하기 | GeekNews
- [원문] Switching pip to uv in a Dockerized Flask / Django App — Nick Janetakis
- uv로 전환 시 Python 디펜던시 설치 속도가 pip 대비 약 10배 빨라지고, 별도의 venv 없이 비루트(non-root) 사용자로도 실행 가능함
- pyproject.toml 기반으로 상위 의존성만 명시하면 uv가 자동으로 lock 파일을 관리하며, 의존성 트리와 정확한 버전 관리가 pip freeze보다 우수함
- Dockerfile에서는 uv 및 uvx 바이너리 복사, pyproject.toml/uv.lock 파일 사용, 환경 변수 설정 등 단계별 변경이 필요
- uv sync/add/remove, uv:outdated와 같은 명령어로 쉽게 의존성 추가·삭제·업데이트 및 패키지 최신 버전 확인 등 다양한 관리가 가능
- 규칙적으로 lock 파일 관리 및 의존성 업데이트가 가능해져 협업 및 배포 환경에서 일관성 확보에 장점
- [원문] uv: Making Python Local Workflows FAST and BORING in 2025 - YouTube
- uv 핵심 명령어 활용
-
uv run: pyproject.toml에 정의되고 uv.lock 파일에 고정된 의존성을 사용하여 가상 환경 내에서 pytest나 fastapi 같은 명령어를 실행합니다. -
uv add: 새로운 의존성을 pyproject.toml에 추가하고 uv.lock 파일을 자동으로 업데이트합니다. -
uv run --with: 프로젝트의 핵심 의존성에 추가하지 않고 pdbpp와 같은 개발용 헬퍼 모듈을 일시적으로 주입하여 사용할 수 있습니다. -
uv lock --upgrade: 의존성 잠금 파일을 매우 빠른 속도로 업데이트합니다. uv run은 실행 시 자동으로 변경된 잠금 파일을 감지하고 환경을 동기화합니다.
-
- justfile을 사용하여 반복적인 작업을 레시피(recipe)로 표준화
- just와 uv의 연동
- 가상 환경 직접 관리 (선택적 워크플로우)
- uv 핵심 명령어 활용
- [원문] Running scripts | uv
- uv를 사용하면 Python 스크립트 실행 시 의존성 관리를 자동화함
- 별도의 가상환경 관리 없이 스크립트별로 환경이 자동으로 생성 및 유지됨
- 필요한 패키지는 inline metadata 또는 명령행 옵션 등 다양한 방식으로 선언 가능함
- Python 버전과 패키지 관리도 스크립트 단위로 선언 및 자동 조정 가능함
- Lock 파일과 의존성 버전 제한 옵션 등으로 재현성과 유지관리성을 높임