ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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.txtpackage>=1.0처럼 버전 범위를 지정할 수 있어, 설치 시점에 따라 다른 하위 의존성 패키지가 설치될 수 있습니다. 이로 인해 개발 환경과 배포 환경이 달라지는 문제가 생길 수 있습니다.

    pyenv

    pyenv는 여러 파이썬 버전을 관리하는 도구입니다. 시스템에 여러 버전의 파이썬(e.g., 3.9, 3.10, 3.11)을 쉽게 설치하고 프로젝트별로 사용할 파이썬 버전을 지정할 수 있게 해줍니다. 시스템 전역, 특정 폴더, 특정 셸 세션별로 파이썬 버전을 자유롭게 전환할 수 있습니다.

    장점

    • 프로젝트마다 다른 파이썬 버전을 충돌 없이 사용할 수 있습니다.
    • 간단한 명령어로 전역 또는 로컬 파이썬 버전을 쉽게 바꿀 수 있습니다.
    • 시스템에 기본으로 설치된 파이썬을 건드리지 않아 안정성을 높여줍니다.

    단점

    • pyenv는 파이썬 '버전'만 관리할 뿐, 라이브러리(패키지)는 관리하지 않습니다. (이 역할은 pip이나 poetry가 담당)
    • 셸 설정(~/.zshrc, ~/.bash_profile 등)에 경로를 추가하는 초기 설정이 약간 필요합니다.

    pipenv

    pipvenv를 합쳐 더 나은 개발 경험을 제공하려는 목적으로 나온 도구입니다. 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에 패키지를 올릴 수 있습니다.

    단점

    • poetrypipenv처럼 복잡한 의존성 관리나 가상 환경 생성 기능은 제공하지 않습니다.
    • 복잡한 애플리케이션보다는 간단한 라이브러리나 패키지 개발에 더 적합합니다.

    uv

    Rust로 작성된 차세대 초고속 파이썬 패키지 설치 및 관리 도구입니다. pippip-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 하나만 사용해도 충분합니다.

    댓글