-
[Python] poetry, pyenv, pipenv, flit, uv 도구 설명언어/파이썬 & 장고 2025. 8. 17. 20:09
파이썬 패키지 관리 도구는 기본적으로 pip가 있고 poetry, pyenv, pipenv, flit, uv처럼 여러 종류가 존재합니다. 아래에서는 각 도구 별로 설명과 장단점을 소개합니다.
pip
pip은 파이썬의 공식 기본 패키지 설치 관리자입니다. Python을 설치하면 기본으로 함께 설치되며,pip install <package>명령어로 Python Package Index(PyPI)에 있는 대부분의 패키지를 설치할 수 있습니다.requirements.txt파일을 통해 패키지 목록을 관리하는 것이 일반적입니다.장점
- 파이썬의 기본 도구이므로 거의 모든 환경에서 사용할 수 있습니다.
- 사용법이 매우 간단하고 직관적입니다.
- 모든 파이썬 패키지는
pip을 통해 설치할 수 있다고 봐도 무방합니다.
단점
- 패키지 간의 복잡한 의존성 충돌을 제대로 해결하지 못할 때가 많습니다. (e.g., A는 C v1.0이 필요하고 B는 C v2.0이 필요할 때 충돌 발생 가능)
- 설치 순서에 따라 C 버전을 덮어쓰고 성공한 것처럼 보여줌
- poetry의 경우, 의존성을 해결할 수 없다는 에러를 발생시킴
pip자체는 가상 환경을 만들거나 관리하는 기능이 없어, 파이썬 내장 모듈인venv와 함께 사용해야 합니다.requirements.txt는package>=1.0처럼 버전 범위를 지정할 수 있어, 설치 시점에 따라 다른 하위 의존성 패키지가 설치될 수 있습니다. 이로 인해 개발 환경과 배포 환경이 달라지는 문제가 생길 수 있습니다.
pyenv
pyenv는 여러 파이썬 버전을 관리하는 도구입니다. 시스템에 여러 버전의 파이썬(e.g., 3.9, 3.10, 3.11)을 쉽게 설치하고 프로젝트별로 사용할 파이썬 버전을 지정할 수 있게 해줍니다. 시스템 전역, 특정 폴더, 특정 셸 세션별로 파이썬 버전을 자유롭게 전환할 수 있습니다.장점
- 프로젝트마다 다른 파이썬 버전을 충돌 없이 사용할 수 있습니다.
- 간단한 명령어로 전역 또는 로컬 파이썬 버전을 쉽게 바꿀 수 있습니다.
- 시스템에 기본으로 설치된 파이썬을 건드리지 않아 안정성을 높여줍니다.
단점
pyenv는 파이썬 '버전'만 관리할 뿐, 라이브러리(패키지)는 관리하지 않습니다. (이 역할은pip이나poetry가 담당)- 셸 설정(
~/.zshrc,~/.bash_profile등)에 경로를 추가하는 초기 설정이 약간 필요합니다.
pipenv
pip과venv를 합쳐 더 나은 개발 경험을 제공하려는 목적으로 나온 도구입니다.Pipfile을 사용해 패키지를 관리하고,Pipfile.lock이라는 lock 파일을 생성하여 의존성을 고정합니다.장점
requirements.txt보다 사람이 읽기 좋은 형식으로 패키지를 관리합니다. 개발용([dev-packages])과 배포용([packages]) 패키지를 구분하기 쉽습니다.- 프로젝트 폴더에서
pipenv install을 실행하면 자동으로 가상 환경을 생성하고 활성화해 줍니다. Pipfile.lock파일로 모든 패키지(하위 의존성 포함)의 버전을 정확히 고정하여, 어느 환경에서든 동일한 패키지 구성를 보장합니다.
단점
- 의존성을 해결하고 설치하는 속도가 다른 도구에 비해 느리다는 평가가 많습니다.
- 한동안 개발이 더디고 이슈 해결이 늦어져 커뮤니티의 신뢰를 일부 잃었습니다.
- 가끔 복잡한 의존성 그래프를 제대로 해결하지 못하는 경우가 있습니다.
poetry
현대적인 파이썬 프로젝트 관리의 올인원(All-in-one) 도구입니다. 의존성 관리, 가상 환경 관리뿐만 아니라 프로젝트 빌드, 패키징, PyPI 배포까지 하나의 도구로 처리할 수 있습니다.
pyproject.toml이라는 표준화된 설정 파일을 사용합니다.장점
- 현재 나온 도구 중 가장 뛰어나고 빠른 의존성 해결 능력을 자랑합니다.
- 프로젝트 생성(
poetry new), 의존성 추가(poetry add), 실행(poetry run), 빌드(poetry build), 배포(poetry publish)까지 모두 지원합니다. - ****PEP 518에서 제안된 표준 설정 파일인
pyproject.toml를 사용하여 다른 빌드 도구와 호환성이 좋습니다.
단점
pip+venv에 비해 배워야 할 명령어나 개념이 조금 더 많습니다.- 정해진 워크플로우를 따르도록 설계되어 있어 일부 복잡하거나 특이한 프로젝트 구조에서는 적용이 까다로울 수 있습니다.
flit
flit은 간단한 순수 파이썬 프로젝트를 패키징하고 배포하는 데 초점을 맞춘 가벼운 도구입니다.poetry처럼pyproject.toml을 사용하지만, 의존성 관리나 가상 환경 기능보다는 '배포' 자체에 집중합니다.장점
- 매우 사용하기 쉽고 간단한 라이브러리를 만들어 배포하는 데는 최고의 선택지 중 하나입니다.
pyproject.toml을 사용하여 군더더기 없는 프로젝트 구조를 가집니다.- 복잡한 설정 없이
flit publish명령어로 쉽게 PyPI에 패키지를 올릴 수 있습니다.
단점
poetry나pipenv처럼 복잡한 의존성 관리나 가상 환경 생성 기능은 제공하지 않습니다.- 복잡한 애플리케이션보다는 간단한 라이브러리나 패키지 개발에 더 적합합니다.
uv
Rust로 작성된 차세대 초고속 파이썬 패키지 설치 및 관리 도구입니다.
pip및pip-tools를 대체할 수 있으며, 기존pip워크플로우와 호환되면서도 압도적인 속도를 자랑합니다. 최근 가장 주목받는 도구입니다.장점
- 패키지 다운로드, 빌드, 설치 등 모든 과정이 기존
pip보다 수십 배에서 수백 배까지 빠릅니다. 이는 병렬 처리와 효율적인 캐싱 덕분입니다. uv pip install처럼pip명령어와 거의 동일하게 사용할 수 있어 기존 프로젝트에 도입하기 쉽습니다.- 가상 환경 생성(
uv venv), 의존성 잠금(uv pip compile) 등 다양한 기능을 하나의 실행 파일로 제공합니다.
단점
- 아직 1.0 버전이 아니며, 일부 엣지 케이스에서는 안정성이 부족할 수 있습니다. (하지만 빠르게 발전하고 있습니다.)
- 아직
poetry처럼 프로젝트 생성, 버전 관리, 배포까지 책임지는 완전한 프로젝트 매니저는 아니지만, 그 방향으로 발전하고 있습니다.
정리
Python 버전 관리, 패키지 설치 및 관리, 통합 프로젝트 및 의존성 관리로 나눴을 때 다음과 같이 분류가 됩니다.
- Python 버전 관리: 여러 버전의 파이썬 자체를 설치하고 전환합니다.
pyenv
- 패키지 설치 및 관리: 특정 파이썬 환경에 라이브러리(패키지)를 설치합니다.
pip,uv
- 통합 프로젝트 및 의존성 관리: 프로젝트 단위로 가상 환경, 패키지 버전, 배포 정보까지 통합적으로 관리합니다.
pipenv,poetry,flit(+uv도 이 영역으로 확장 중)
패키지 빌드 및 배포를 할 필요가 없다면 uv 하나만 사용해도 충분합니다.