Python 패키지 관리자는 의존성 설치, 가상 환경 관리, 프로젝트 설정 등을 담당하는 도구이다.
Python 생태계에는 다양한 패키지 관리자가 존재하며, 각각 해결하고자 하는 문제와 접근 방식이 다르다. 크게 패키지 설치 도구와 프로젝트 관리 도구, 그리고 환경 관리 도구로 구분할 수 있다.
pip
Python의 기본 패키지 설치 도구이다. PyPI(Python Package Index)에서 패키지를 다운로드하여 설치한다.
# 패키지 설치pip install requests
# 버전 지정pip install requests==2.31.0
# requirements.txt로 일괄 설치pip install -r requirements.txt
# 현재 환경을 파일로 내보내기pip freeze > requirements.txt특징
- Python 표준 패키지 관리자
- PyPI 저장소 사용
- 의존성 해결이 단순하여 충돌 가능성 있음
- 가상 환경 관리 기능 없음 (venv와 함께 사용)
한계
- lock 파일이 없어 재현 가능한 빌드가 어려움
- 의존성 해결 알고리즘이 단순함
- 개발/프로덕션 의존성 구분이 번거로움
venv
Python 3.3부터 표준 라이브러리에 포함된 가상 환경 도구이다.
# 가상 환경 생성python -m venv .venv
# 활성화 (Linux/macOS)source .venv/bin/activate
# 활성화 (Windows).venv\Scripts\activate
# 비활성화deactivatepip + venv 조합은 가장 기본적인 Python 환경 관리 방식이다.
conda 계열
conda는 Python뿐 아니라 C/C++ 라이브러리, R, Julia 등 다양한 언어의 패키지를 관리할 수 있는 크로스 플랫폼 패키지 관리자이다. 특히 과학 계산, 데이터 사이언스 분야에서 널리 사용된다.
conda
# 환경 생성conda create -n myenv python=3.11
# 환경 활성화conda activate myenv
# 패키지 설치conda install numpy pandas
# 환경 내보내기conda env export > environment.yml- Anaconda 또는 Miniconda와 함께 설치
- Python으로 작성되어 의존성 해결이 느림
- 바이너리 패키지 제공으로 컴파일 불필요
mamba
# conda 대신 mamba 사용 (동일한 명령어)mamba create -n myenv python=3.11mamba install numpy- conda의 드롭인 대체품
- C++로 작성된 libsolv 기반 solver 사용
- conda 대비 10-100배 빠른 의존성 해결
- 여전히 Python 런타임 필요
micromamba
# 환경 생성micromamba create -n myenv python=3.11
# 패키지 설치micromamba install -c conda-forge numpy- mamba의 C++ 코어만 추출한 경량 버전
- Python 의존성 없는 단일 바이너리 (~1MB)
- CI/CD, Docker 환경에 최적화
Poetry
현대적인 Python 프로젝트 관리 도구이다. 의존성 관리, 패키징, 배포를 하나의 도구로 통합한다.
# 프로젝트 초기화poetry init
# 의존성 추가poetry add requestspoetry add pytest --group dev
# 의존성 설치poetry install
# 가상 환경에서 실행poetry run python main.pypoetry shellpyproject.toml 예시
[tool.poetry]name = "myproject"version = "0.1.0"
[tool.poetry.dependencies]python = "^3.11"requests = "^2.31.0"
[tool.poetry.group.dev.dependencies]pytest = "^7.4.0"특징
- pyproject.toml 기반 프로젝트 설정
- poetry.lock으로 재현 가능한 빌드 보장
- 개발/프로덕션 의존성 그룹 분리
- PyPI 배포 기능 내장
- 의존성 해결이 정확하지만 느릴 수 있음
uv
Rust로 작성된 초고속 Python 패키지 관리자이다. pip, pip-tools, virtualenv를 대체한다.
# 패키지 설치 (pip 대체)uv pip install requests
# 가상 환경 생성uv venv
# requirements.txt에서 설치uv pip install -r requirements.txt
# lock 파일 생성uv pip compile requirements.in -o requirements.txt특징
- Rust로 작성되어 pip 대비 10-100배 빠름
- pip와 호환되는 CLI
- 글로벌 캐시로 디스크 공간 절약
- 2024년 출시된 최신 도구
PDM
PEP 582(로컬 패키지 디렉토리) 및 PEP 621을 지원하는 현대적 패키지 관리자이다.
# 프로젝트 초기화pdm init
# 의존성 추가pdm add requestspdm add -dG test pytest
# 설치pdm install
# 실행pdm run python main.py특징
- pyproject.toml 기반 (PEP 621 표준)
- 가상 환경 없이
__pypackages__사용 가능 - 빠른 의존성 해결
- Poetry와 유사한 워크플로우
Pipenv
pip + virtualenv를 통합한 도구이다. 한때 공식 권장 도구였으나 현재는 Poetry나 PDM이 더 선호된다.
# 의존성 설치pipenv install requestspipenv install pytest --dev
# 가상 환경 활성화pipenv shell
# Pipfile.lock 기반 설치pipenv sync특징
- Pipfile, Pipfile.lock 사용
- 자동 가상 환경 관리
- 개발 의존성 분리 지원
- 의존성 해결이 느림
도구 선택 가이드
데이터 사이언스/ML 프로젝트
- conda 또는 mamba 권장
- NumPy, SciPy 등 바이너리 의존성이 많은 경우 유리
- CI/CD에서는 micromamba 사용
일반 Python 프로젝트
- Poetry 또는 PDM 권장
- 표준화된 pyproject.toml 사용
- lock 파일로 재현 가능한 빌드
빠른 속도가 중요한 경우
- uv 사용 고려
- 기존 pip 워크플로우와 호환
간단한 스크립트/소규모 프로젝트
- pip + venv로 충분
CI/CD 환경
- micromamba: conda 환경이 필요한 경우
- uv: pip 기반 환경에서 빠른 설치
정리
각 도구의 기능을 요약하면 다음과 같다.
- pip: 패키지 설치만 담당. 환경/프로젝트 관리 없음. 보통 속도.
- venv: 환경 관리만 담당. Python 표준 라이브러리.
- conda: 패키지 설치 + 환경 관리. 바이너리 패키지 지원. 느림.
- mamba: conda 호환. C++ solver로 빠른 의존성 해결.
- micromamba: mamba의 경량 버전. Python 불필요. CI/CD에 적합.
- Poetry: 패키지 + 환경 + 프로젝트 관리 통합. pyproject.toml 기반. 보통 속도.
- PDM: Poetry와 유사. PEP 표준 준수. 빠른 의존성 해결.
- uv: Rust 기반 초고속 pip 대체. 매우 빠름.
- Pipenv: pip + virtualenv 통합. Pipfile 사용. 느림.
Python 패키지 관리 생태계는 계속 발전하고 있다. 최근에는 Rust로 작성된 빠른 도구들(uv, ruff 등)이 등장하면서 기존 도구들을 대체하는 추세이다. 프로젝트의 요구사항과 팀의 경험에 맞는 도구를 선택하는 것이 중요하다.
참고