패키지 관리
학습 목표
가상환경의 필요성을 이해하고 venv를 생성/활성화할 수 있다
pip과 uv로 패키지를 설치/관리할 수 있다
pyproject.toml로 프로젝트 의존성을 선언할 수 있다
재현 가능한 개발 환경을 구성할 수 있다
왜 중요한가
ML/DL 프로젝트는 수십 개의 패키지에 의존하며, 패키지 간 버전 호환성이 매우 중요합니다. PyTorch, CUDA, transformers 등의 버전 조합이 맞지 않으면 학습이 불가능합니다. 재현 가능한 환경 관리는 연구와 프로덕션 모두에서 필수적입니다.
가상환경 (Virtual Environment)
가상환경은 프로젝트별로 독립된 Python 환경을 제공합니다.
# venv로 가상환경 생성
python3 -m venv .venv
# 활성화
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows
# 비활성화
deactivate
가상환경 없이 시스템 Python에 패키지를 설치하면 프로젝트 간 버전 충돌이 발생합니다. 항상 가상환경을 사용하세요.
pip (기본 패키지 관리자)
# 패키지 설치
pip install numpy
pip install numpy== 1.24.0 # 특정 버전
pip install "numpy>=1.24,<2.0" # 버전 범위
# 패키지 삭제
pip uninstall numpy
# 설치된 패키지 목록
pip list
pip freeze > requirements.txt # 잠금 파일 생성
# requirements.txt로 설치
pip install -r requirements.txt
# 패키지 정보
pip show numpy
uv (차세대 패키지 관리자)
uv는 Rust로 작성된 고속 패키지 관리자입니다. pip보다 10-100배 빠릅니다.
# uv 설치 (이미 설치되어 있는 경우 생략)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 프로젝트 초기화
uv init my-project
cd my-project
# 가상환경 생성
uv venv
# 패키지 설치 (pip 호환)
uv pip install numpy pandas
uv pip install torch --index-url https://download.pytorch.org/whl/cu130
# requirements.txt 사용
uv pip install -r requirements.txt
# 패키지 잠금
uv pip compile requirements.in -o requirements.txt
pip vs uv 비교
특성 pip uv 속도 기본 10-100x 빠름 의존성 해결 순차적 병렬 + 캐싱 언어 Python Rust 가상환경 python -m venvuv venv잠금 파일 pip freezeuv pip compile
pyproject.toml
pyproject.toml은 Python 프로젝트의 표준 설정 파일입니다.
[ project ]
name = "ml-experiment"
version = "0.1.0"
description = "ML 실험 프로젝트"
requires-python = ">=3.10"
dependencies = [
"numpy>=1.24" ,
"pandas>=2.0" ,
"scikit-learn>=1.3" ,
"torch>=2.0" ,
]
[ project . optional-dependencies ]
dev = [
"pytest>=7.0" ,
"ruff>=0.1" ,
"mypy>=1.0" ,
]
[ tool . pytest . ini_options ]
testpaths = [ "tests" ]
[ tool . ruff ]
line-length = 88
ML 환경 구성 실전
# 1. 프로젝트 초기화
uv init ml-project && cd ml-project
uv venv --python 3.12
# 2. 가상환경 활성화
source .venv/bin/activate
# 3. ML 패키지 설치
uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu130
uv pip install transformers datasets
uv pip install numpy pandas matplotlib
# 4. 개발 도구 설치
uv pip install pytest ruff mypy ipykernel
# 5. Jupyter 커널 등록
python -m ipykernel install --user --name ml-project
# 6. 의존성 잠금
uv pip freeze > requirements.txt
conda와 pip/uv의 차이는 무엇인가요?
conda는 Python 외 바이너리(CUDA, cuDNN 등)도 관리할 수 있지만, 속도가 느리고 PyPI와 호환성 문제가 있을 수 있습니다. pip/uv는 PyPI 중심으로 빠르고 표준적입니다. CUDA는 시스템에 별도 설치하고, Python 패키지는 pip/uv로 관리하는 것을 권장합니다.
requirements.txt vs pyproject.toml 어떤 것을 사용하나요?
pyproject.toml이 현대적인 표준입니다. 프로젝트 메타데이터, 의존성, 도구 설정을 하나의 파일에서 관리합니다. requirements.txt는 잠금 파일로 함께 사용합니다.
체크리스트
다음 문서