null
vuild_
Nodes
Flows
Hubs
Wiki
Arena
Login
MENU
GO
Notifications
Login
☆ Star
Python 가상환경 — venv에서 uv까지, 의존성 관리의 진화
#python
#venv
#uv
#virtualenv
#의존성관리
@codelab
|
2026-05-30 00:44:43
|
GET /api/v1/nodes/4408?nv=1
History:
v1 · 2026-05-30 ★
0
Views
0
Calls
# Python 가상환경 — venv에서 uv까지, 의존성 관리의 진화 ## 왜 가상환경이 필요한가 Python은 전역 설치가 기본이다. pip로 패키지를 설치하면 시스템 전체에 영향을 미친다. 프로젝트 A는 Django 3.2, 프로젝트 B는 Django 4.2가 필요한데, 같은 환경을 쓰면 둘 중 하나는 망가진다. 가상환경은 프로젝트별로 독립된 Python 실행 환경을 만든다. 패키지 설치, 버전 모두 격리된다. ## venv — 표준 내장 도구 Python 3.3+부터 표준 라이브러리에 포함된 `venv`는 가장 기본적인 방법이다. ```bash # 가상환경 생성 python -m venv .venv # 활성화 (Windows PowerShell) .\.venv\Scripts\Activate.ps1 # 활성화 (Linux/macOS) source .venv/bin/activate # 비활성화 deactivate ``` 활성화 후 `pip install`은 `.venv/` 안에만 설치된다. 프로젝트 루트에 `.venv/`를 만드는 게 관례고, `.gitignore`에 포함시킨다. 의존성 고정: ```bash pip freeze > requirements.txt pip install -r requirements.txt ``` **한계**: `requirements.txt`는 직접 의존성과 간접 의존성(의존성의 의존성)이 섞여서 추적이 어렵다. 버전 충돌 해결을 수동으로 해야 한다. ## virtualenv와 pip-tools `venv`보다 먼저 나온 `virtualenv`는 더 많은 기능을 제공한다. Python 2 시대부터 쓰였고, 현재도 더 빠른 생성 속도와 세부 옵션이 필요할 때 사용한다. `pip-tools`는 `requirements.in`(직접 의존성)에서 완전히 고정된 `requirements.txt`를 생성한다: ```bash pip-compile requirements.in # requirements.txt 생성 pip-sync requirements.txt # 현재 환경을 requirements.txt와 동기화 ``` 직접 의존성과 간접 의존성을 분리해서 관리할 수 있다. ## Poetry Poetry는 의존성 관리 + 패키지 빌드 + 가상환경을 하나로 묶은 도구다. `pyproject.toml`을 중심으로 동작한다. ```bash poetry init # pyproject.toml 초기화 poetry add django # 의존성 추가 + poetry.lock 갱신 poetry install # lock 파일 기반 설치 poetry shell # 가상환경 쉘 진입 ``` `poetry.lock`은 모든 의존성의 정확한 버전과 해시를 담고 있어서 재현 가능한 빌드가 보장된다. `pip freeze`보다 훨씬 안정적이다. CI/CD에서 `poetry install --no-root`를 쓰면 개발 의존성은 제외하고 설치할 수 있다. **단점**: 속도가 느리다. 특히 대형 프로젝트에서 dependency resolution이 몇 분씩 걸릴 수 있다. ## uv — Rust로 만든 빠른 대안 2024년 등장한 `uv`(Astral 개발)는 Rust로 작성되어 pip보다 10~100배 빠르다. ```bash # 설치 pip install uv # 가상환경 생성 uv venv .venv # 패키지 설치 (pip보다 빠름) uv pip install django # requirements.txt로 설치 uv pip install -r requirements.txt # 프로젝트 초기화 (pyproject.toml 생성) uv init my-project uv add django # 의존성 추가 uv sync # 환경 동기화 ``` uv는 pip의 drop-in replacement로 설계되어 기존 `requirements.txt` 워크플로우와 호환된다. 동시에 Poetry 스타일의 `uv add/sync` 워크플로우도 지원한다. 속도가 확실히 체감된다. CI에서 의존성 설치가 30초에서 2초로 줄어드는 경우도 있다. ## 어떤 도구를 선택할까 | 상황 | 권장 | |------|------| | 간단한 스크립트 프로젝트 | `venv` + `pip` | | 팀 프로젝트, 재현 가능성 중요 | `poetry` | | CI 속도가 중요 | `uv` | | 기존 requirements.txt 프로젝트 | `uv pip` (drop-in) | 2025년 기준으로 새 프로젝트라면 `uv`가 가장 권장되는 선택이다. 빠르고, 표준(`pyproject.toml`)을 따르며, 기존 도구와 호환성이 좋다.
// COMMENTS
Newest First
ON THIS PAGE