Table of contents
Open Table of contents
개요
파이썬에는 여러가지 패키지 매니징 툴들이 있다.
pip, conda, poetry 등 여러가지 툴들이 있고 그 중에서 pip가 가장 보편적이면서 많이 쓰인 툴이다.
conda
conda는 주로 NumPy, SciPy 같은 과학 컴퓨팅 라이브러리를 쉽게 설치하고자 하는 목적에서 개발되었다.
하지만 별도의 패키지 저장소(Anaconda Cloud, conda-forge)를 사용하고, pip 와는 분리된 자체 의존성 해석 방식, 가상환경 관리 방식을 채택하고 있어서 생태계가 이원화되는 문제를 야기했다.
poetry
poetry는 pyproject.toml과 poetry.lock 기반으로 의존성을 엄격히 고정하고, 여러 플랫폼에서 재현 가능한 빌드를 제공한다는 점에서 각광을 받았다.
단점으로는, 복잡한 의존성을 가진 프로젝트에서 해석 속도가 느리다는 점이 종종 지적되었다.
uv란
uv는 Rust로 작성된 고속 의존성 해석 엔진을 앞세워, 가상환경 생성, 의존성 관리, 파이썬 버전 관리, 패키징, 포매터/린터 같은 서드파티 도구 실행을 한번에 알아서 처리해준다.
주요 특징으로는 다음과 같다.
성능(Performance)
- Rust 기반 Resolver로 의존성 설치 속도가 pip나 poetry 대비 10~100배 빠르다는 공식 벤치마크가 있다.
- 캐싱과 최적화를 적극 활용하여 대규모 프로젝트에서도 빠른 설치 및 업데이트가 가능하다.
사용 편의성(Usability)
- uv add 등 단순화된 CLI 명령어로 대부분의 작업을 수행할 수 있다.
- .venv 폴더나 파이썬 버전 설정(.python-version 등)을 직접 신경 쓰지 않아도 자동으로 생성·관리해준다.
- Rust에서 “Cargo 하나로 빌드, 의존성 관리, 패키징, 배포 등 모든 작업”을 해결하는 것처럼, Python 환경에서도 uv 하나로 가능하게끔 디자인되어 있다.
- Astral의 CEO Charlie Marsh 및 rye 개발자 Armin Ronacher 등이 Python tooling 역사의 문제점을 충분히 연구하고, 그 교훈을 uv에 반영했다.
- uv는 오픈소스로 공개되어 있으며, 활발한 커뮤니티 피드백을 받고 있다.
사용법
- 프로젝트 생성
uv init uv-demo
cd uv-demo
- uv init 명령어를 통해 새로운 uv 프로젝트를 초기화한다.
- uv-demo 폴더가 생성되고, 내부 구조는 대략 다음과 같다.
uv-demo/
├── .python-version
├── .gitignore
├── pyproject.toml
├── hello.py
└── README.md
- .python-version을 통해 파이썬 버전이 고정된다.
- pyproject.toml 은 의존성 및 프로젝트 메타데이터를 정의하는 핵심 파일이다.
- .venv 폴더는 아직 보이지 않을 수 있는데, 의존성을 추가하면 자동으로 생성된다.
성능 비교
도구 설치 시간 pip 18.3초 poetry 6.3초 uv 2.3초
uv가 pip 대비 8배, poetry 대비 3배 가까이 빠른 결과가 나왔다.
실제 대규모 프로젝트에서는 의존성 충돌이나 빌드 과정이 더 복잡해져, uv의 속도 우위가 더욱 뚜렷해질 가능성이 크다.
자세한 성능비교내용은 아래 참고 사이트에 기재되어있다.
인터랙티브 개발과 uv
동일한 .venv 가상 환경을 IDE가 바로 인식하도록 해준다.
예를 들어, uv add — dev ipykernel 명령을 통해 개발용 의존성(dev dependency group) 으로 ipykernel을 설치해두면, IDE가 이를 자동으로 감지해 가상환경 커널을 연결한다.
uv add -r requirements.txt # 주요 의존성 설치
uv add --dev ipykernel # 개발용(인터랙티브) 의존성 추가
이로써 주피터 노트북처럼 별도의 커널을 생성·관리할 필요가 현저히 줄어든다.
팀원들이 다른 에디터를 쓰더라도, uv sync만 하면 동일한 .venv 를 재현할 수 있다.
uv 명령어 모음
uv init
- 새로운 uv 프로젝트 초기화, pyproject.toml 생성
uv add <패키지명>
- 특정 패키지 추가
- uv add -r requirements.txt로
requirements.txt전체 추가 가능
uv sync
- pyproject.toml 과 uv.lock 파일을 기준으로 가상환경 재생성 및 동기화
uv run <파일명.py>
- 가상환경을 자동 적용하여 파이썬 스크립트 실행
uvx <툴> (uv tool run 명령의 축약형)
- ruff, mypy 등 서드파티 명령을 자동으로 설치·실행해줌
- 예) uvx ruff check .