Skip to main content

패키지 관리

학습 목표

  • 가상환경의 필요성을 이해하고 venv를 생성/활성화할 수 있다
  • pipuv로 패키지를 설치/관리할 수 있다
  • 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 비교

특성pipuv
속도기본10-100x 빠름
의존성 해결순차적병렬 + 캐싱
언어PythonRust
가상환경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는 Python 외 바이너리(CUDA, cuDNN 등)도 관리할 수 있지만, 속도가 느리고 PyPI와 호환성 문제가 있을 수 있습니다. pip/uv는 PyPI 중심으로 빠르고 표준적입니다. CUDA는 시스템에 별도 설치하고, Python 패키지는 pip/uv로 관리하는 것을 권장합니다.
pyproject.toml이 현대적인 표준입니다. 프로젝트 메타데이터, 의존성, 도구 설정을 하나의 파일에서 관리합니다. requirements.txt는 잠금 파일로 함께 사용합니다.

체크리스트

  • 가상환경을 생성하고 활성화/비활성화할 수 있다
  • pip 또는 uv로 패키지를 설치/관리할 수 있다
  • pyproject.toml로 프로젝트 의존성을 선언할 수 있다
  • 재현 가능한 환경을 구성할 수 있다

다음 문서