Python 패키지 관리 도구 uv: 빠르고 강력한 올인원 솔루션
Python 개발에서 패키지 관리와 가상 환경 설정은 필수적인 작업입니다. 기존에 pip, venv, poetry 같은 도구들이 널리 사용되어 왔지만, 최근 주목받는 uv는 이 모든 기능을 통합하면서도 속도와 효율성 면에서 혁신적인 경험을 제공합니다. Rust로 작성된 uv는 빠른 의존성 해석과 간편한 프로젝트 관리로 pip와 poetry의 대안을 넘어서는 도구로 자리 잡고 있습니다. 이 글에서는 uv의 주요 명령어와 그 사용법을 상세히 살펴보겠습니다.
uv란?
uv는 Astral 팀이 2024년 초에 출시한 Python 패키지 및 프로젝트 관리 도구로, 기존 도구들의 장점을 결합하고 Rust 기반의 초고속 의존성 해석(Resolver)을 제공합니다. uv는 패키지 설치, 가상 환경 관리, 스크립트 실행, 그리고 pyproject.toml 기반의 프로젝트 관리를 지원하며, PEP 723을 통해 단일 파일 스크립트의 의존성 관리까지 가능하게 합니다.
이제 uv의 주요 명령어와 그 사용법을 하나씩 살펴보겠습니다.
주요 명령어와 사용법
1. uv 설치
uv를 사용하려면 먼저 설치해야 합니다. 아래 명령어를 사용해 uv를 설치할 수 있습니다:
pip install uv
또는 공식 문서에서 제공하는 설치 스크립트를 사용할 수도 있습니다:
curl -LsSf https://astral.sh/uv/install.sh | sh
설치 후, uv --version 명령어로 설치된 버전을 확인할 수 있습니다.
2. 가상 환경 생성 및 활성화
uv는 가상 환경을 빠르게 생성하고 관리할 수 있습니다. 기존 venv보다 훨씬 빠르며, 프로젝트별로 독립적인 환경을 쉽게 설정할 수 있습니다.
- 가상 환경 생성:현재 디렉토리에 .venv 폴더를 생성하며, Python 가상 환경을 설정합니다. 특정 Python 버전을 지정하려면 --python 옵션을 사용하세요:
- uv venv --python 3.11
- uv venv
- 가상 환경 활성화:Windows의 경우:
- .\.venv\Scripts\activate
- source .venv/bin/activate
3. 패키지 설치
uv는 pip의 install 명령어와 달리 add 명령어를 사용해 패키지를 설치합니다. 설치된 패키지는 pyproject.toml 파일에 자동으로 기록되어 의존성 관리가 간편합니다.
- 패키지 추가:예: pytest 설치
- uv add pytest
- uv add <패키지명>
- 특정 버전 설치:
- uv add "pytest==7.4.0"
- 개발용 의존성 설치:
개발용 패키지(예: 테스트 도구)는 --dev 플래그를 사용합니다: - uv add --dev black
- pip 호환 설치:
uv는 기존 pip 명령어도 지원합니다: - uv pip install pytest
4. 패키지 제거
설치된 패키지를 제거하려면 remove 명령어를 사용합니다:
uv remove <패키지명>
예: pytest 제거
uv remove pytest
5. 스크립트 실행
uv는 Python 스크립트를 실행하거나 설치하지 않은 패키지의 명령어를 바로 실행할 수 있는 run과 uvx 명령어를 제공합니다.
- 스크립트 실행:uv run은 프로젝트의 가상 환경에서 스크립트를 실행하며, 필요한 의존성을 자동으로 설치합니다.
- uv run main.py
- 임시 패키지 실행:
설치하지 않고 패키지의 명령어를 실행하려면 uvx를 사용합니다. 예를 들어, pycowsay를 설치하지 않고 실행: - uvx pycowsay 'Hi'
6. 의존성 동기화
프로젝트의 의존성을 pyproject.toml 파일과 동기화하려면 sync 명령어를 사용합니다:
uv sync
이 명령어는 pyproject.toml에 명시된 의존성을 설치하고, 불필요한 패키지를 제거합니다.
7. Python 버전 관리
uv는 Python 버전 관리도 지원합니다. 특정 Python 버전을 설치하거나 전환할 수 있습니다.
- Python 버전 설치:
- uv python install 3.11
- 현재 프로젝트의 Python 버전 설정:
- uv python pin 3.11
8. 캐시 관리
uv는 빠른 속도를 위해 캐시를 활용하며, 캐시 관리를 위한 명령어도 제공합니다.
- 캐시 정리:
- uv cache clean
- 캐시 상태 확인:
- uv cache list
9. 단일 파일 스크립트 의존성 관리 (PEP 723)
uv는 PEP 723을 지원하여 단일 Python 파일에 의존성을 명시하고 실행할 수 있습니다. 스크립트 상단에 주석으로 의존성을 추가한 후 실행할 수 있습니다.
예제 스크립트 (script.py):
# /// script
# dependencies = ["requests"]
# ///
import requests
response = requests.get("https://api.example.com")
print(response.json())
실행:
uv run script.py
uv는 스크립트의 의존성을 자동으로 설치하고 실행합니다.
10. 프로젝트 초기화
새로운 Python 프로젝트를 시작하려면 init 명령어를 사용해 pyproject.toml 기반의 프로젝트를 초기화할 수 있습니다:
uv init my-project
이 명령어는 my-project 디렉토리를 생성하고 기본 pyproject.toml 파일을 설정합니다.
uv의 장점
- 속도: Rust로 작성된 uv는 pip보다 훨씬 빠른 의존성 해석과 설치 속도를 제공합니다.
- 통합성: pip, venv, poetry의 기능을 하나로 통합하여 워크플로우를 간소화합니다.
- PEP 723 지원: 단일 파일 스크립트에서도 의존성 관리가 가능합니다.
- 직관적인 명령어: add, remove, sync 등 직관적인 명령어로 생산성을 높입니다.
결론
uv는 Python 패키지 관리와 프로젝트 설정을 단순화하면서도 속도와 효율성을 극대화한 도구입니다. 기존 pip 사용자라면 uv의 간편한 명령어와 빠른 성능에 매력을 느낄 가능성이 큽니다. 프로젝트 초기화부터 가상 환경 관리, 스크립트 실행까지 uv 하나로 모든 작업을 처리할 수 있습니다. uv를 사용해보고 싶다면, 공식 문서(https://docs.astral.sh/uv/)를 참고해 시작해보세요
'개발 > python' 카테고리의 다른 글
파이썬 yaml 다루는 방법 (0) | 2025.05.18 |
---|---|
파이썬 click 라이브러리 - CLI 높은 확장성 제공 (0) | 2025.05.17 |
ModuleNotFoundError: No module named '_lzma' (0) | 2025.05.01 |