새로운 파이썬 패키지 관리 도구, uv
파이썬에는 다양한 패키지 관리 도구가 존재합니다. pip
, venv
, virtualenv
, pipenv
, poetry
등 각 도구들은 가상환경 생성, 패키지 설치, 의존성 관리 등의 역할을 분담합니다. 최근 이 모든 기능을 하나로 통합하면서도 빠른 속도를 자랑하는 새로운 도구가 등장했습니다. 바로 uv입니다.
uv
uv
는 Astral에서 개발한 초고속 파이썬 패키지 관리 도구입니다. 러스트(Rust)로 개발되었기 때문에 네이티브 툴의 매우 빠른 속도와 러스트 메모리 모델이 제공하는 높은 안정성이 제공합니다. Astral은 uv뿐만 아니라 파이썬 코드 린터인 Ruff
도 러스트로 개발하고 있습니다. uv
는 여러 파이썬 도구들이 제공하던 다양한 기능을 하나로 통합한 스위스 군대 칼같은 멀티툴로, 단일 명령어를 사용하여 가상환경을 만들고 패키지를 설치하며, 프로젝트의 의존성을 관리할 수 있습니다.
특징
- 매우 빠른 속도: 러스트로 구현되었기 때문에 기존 도구보다 월등히 빠릅니다. pip보다 10배~100배 빠르다고 홍보하고 있죠.
- 올인원 도구:
pip
,venv
,virtualenv
,pip-tools
,poetry
의 기능을 모두 갖추고 있습니다. - 자동 가상환경 생성: 패키지를 설치할 때 가상환경이 없으면 자동으로 생성합니다.
- PEP 582 지원:
.venv
없이도 프로젝트 로컬 디렉터리에 패키지를 설치할 수 있습니다. - Python과의 높은 호환성: 표준 파이썬 워크플로와 충돌 없이 동작할 수 있습니다.
무엇을 대체할 수 있을까?
uv
는 아래 도구들을 모두 대체할 수 있습니다:
pip
(패키지 설치/제거)venv
,virtualenv
(가상환경 생성)pip-tools
,pipenv
,poetry
(의존성 관리 및 고정)
따라서 여러 도구를 설치하여 설정하지 않아도, uv
하나만으로 파이썬 프로젝트를 효율적으로 관리할 수 있습니다.
설치
uv
는 다음 명령어만 실행하면 간편하게 설치됩니다.
curl -Ls https://astral.sh/uv/install.sh | sh
설치 후에는 터미널에서 uv
명령어가 동작하는지 확인해 봅니다:
uv --version
가상환경
파이썬에서 가상환경(Virtual Environment)은 서로 다른 프로젝트마다 독립적인 패키지 공간을 제공하는 기술입니다. 프로젝트마다 필요한 패키지 버전이 다를 수 있기 때문에, 시스템 전체에 영향을 주지 않고 프로젝트별로 격리된 환경을 만드는 것이 중요합니다.
가상환경이 필요한 이유
- 서로 다른 프로젝트가 서로 다른 패키지 버전을 필요로 할 수 있습니다.
- 전역 파이썬 환경에 설치된 패키지는 다른 프로젝트에 영향을 줄 수 있습니다.
- 개발과 배포 환경 간에 일관성을 유지하기 위해서도 중요합니다.
예를 들어, A 프로젝트는 Django 4.2
, B 프로젝트는 Django 5.2.5
를 사용한다고 가정해 봅시다. 전역 환경에서 패키지를 설치하면 의존성 충돌이 일어날 수 있지만, 따로 가상환경을 분리하여 패키지를 설치하면 이 문제가 일어나지 않습니다.
가상환경의 구조
보통 가상환경은 .venv
또는 env
라는 폴더로 구성되어 있고, 내부에 아래와 같은 구조를 가집니다:
.venv/
├── bin/ (또는 Scripts/ - 윈도우)
├── lib/
├── pyvenv.cfg
가상환경 사용법
가상환경 만들기
현재 디렉터리에 .venv
폴더를 만들고 가상환경을 생성하려면 다음 명령어를 실행합니다:
uv venv
가상환경의 이름을 지정하여 만들고 싶다면 다음 명령어를 실행합니다:
uv venv myenv
여러 버전의 파이썬 설치하기
uv에서는 파이썬을 설치할 수 없습니다. 따라서 파이썬 런타임은 따로 설치해야 하며, 설치된 파이썬 버전을 기반으로 가상환경을 만듭니다.
uv
에서 특정 파이썬 버전으로 가상환경을 만들려면 해당 버전이 시스템에 먼저 설치되어 있어야 합니다. 파이썬은 공식 웹사이트나 pyenv
, 패키지 매니저를 통해 여러 버전을 한 컴퓨터에 설치할 수 있습니다.
macOS / Linux의 경우 pyenv를 사용할 수 있습니다.
brew install pyenv # macOS의 경우
sudo apt install pyenv # Ubuntu의 경우
pyenv install 3.11.6
pyenv install 3.10.13
설치된 버전은 pyenv versions
로 확인하고, 특정 버전을 기본값으로 설정할 수 있습니다.
pyenv global 3.11.6
Windows의 경우 python.org에서 설치본을 다운로드 받아 설치하거나 winget 명령어로 설치할 수 있습니다.
winget install Python.Python.3.11
winget install Python.Python.3.10
설치 후 python3.11 --version
과 같이 확인할 수 있고, uv
에서 사용할 때는 해당 경로 또는 명령어를 지정하면 됩니다.
다른 파이썬 버전으로 가상환경 만들기
사용하고 싶은 파이썬 버전을 --python 매개변수로 지정합니다.
uv venv --python=python3.11
Windows에서는 파이썬의 전체 경로를 지정합니다.
uv venv --python="C:\Python311\python.exe"
가상환경을 활성화하는 방법은 기존과 동일합니다.
macOS/Linux에서는 다음 명령어를 실행합니다.: .venv/bin/activate
Windows에서는 다음 명령어를 실행합니다.: .venv\Scripts\Activate.ps1
가상환경을 비활성화하려면 다음 명령어를 실행합니다.: deactivate
패키지 설치 및 의존성 관리
uv
는 pip
의 역할을 빠르고 효율적으로 수행합니다. 아래는 uv pip
를 사용하는 주요 예제입니다.
패키지 설치 관리
패키지 설치
uv pip install requests
이 명령어는 requests
패키지를 설치합니다. 사용중인 가상환경이 없으면 자동으로 .venv 가상환경을 만들고 거기에 해당 패키지를 설치합니다.
설치된 패키지 목록 저장하기
uv pip freeze > requirements.txt
requirements.txt 기반으로 패키지 설치하기
uv pip install -r requirements.txt
더 빠르고 깔끔하게 동기화하고 싶다면 sync
명령어를 사용할 수 있습니다:
uv pip sync requirements.txt
패키지는 어디에 설치될까?
uv pip install
로 설치한 패키지는 가상환경 내부의 site-packages 폴더에 저장됩니다.
예를 들어, .venv
폴더를 가상환경으로 사용하고 있다면 다음 경로에 설치됩니다:
macOS/Linux에서는 다음 경로에 설치됩니다. : .venv/lib/python3.x/site-packages/
Windows에서는 다음 경로에 설치됩니다. : .venv\Lib\site-packages\
이 경로는 파이썬이 모듈을 찾을 때 사용하는 sys.path
에 자동 등록됩니다.
즉, 가상환경을 활성화하면 해당 디렉터리에 설치된 모든 모듈을 바로 import
해서 사용할 수 있습니다.
import site
print(site.getsitepackages())
import sys
print(sys.path)
uv는 일반적인 파이썬 가상환경 구조를 준수하므로 기존 venv, virtualenv와 완벽히 호환됩니다.
이제 uv
로 빠르고 깔끔한 파이썬 개발 환경을 구성해보세요.
가상환경에 대한 보다 자세한 이야기는 제가 번역하고 인사이트 출판사에서 펴낸 <파이썬다운 코드를 개발하는 63가지 실용기법> 488쪽부터 493쪽까지 설명되어 있습니다.
알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=369848931
교보: https://product.kyobobook.co.kr/detail/S000217294649
YES24: https://www.yes24.com/product/goods/151253343
파이썬다운 코드를 개발하는 63가지 실용 기법 | 프로그래밍 인사이트 Programming Insight | 용 추이
63가지 핵심 파이썬 기술을 익힐 수 있는 간단하지만 강력한 방법을 제시한다. 예를 들어, ‘시퀀스에서 항목을 찾으려면 어떻게 해야 할까?’와 같은 질문에서 출발하여 매우 명확한 기본 해결
www.aladin.co.kr