[pyproject.toml 완전 정복 6편] 다양한 빌드 백엔드 비교 및 전략 수립

pyproject.toml는 빌드 백엔드 선택에 유연성을 제공합니다. PEP 518 이후 빌드 백엔드를 명시하면 pip나 다른 설치도구가 해당 백엔드를 활용해 프로젝트를 빌드할 수 있습니다. 하지만 빌드 백엔드(예: Flit, Poetry, Hatch, Setuptools)가 각각 고유한 철학과 기능을 갖고 있어, 프로젝트 요구사항에 따라 적절한 백엔드를 선택하는 전략이 필요합니다.

etc-image-0

이번 글에서는 대표적인 빌드 백엔드를 비교하고, 상황별로 어떤 빌드 백엔드가 적합한지 판단할 수 있는 가이드를 제안합니다.

대표적인 빌드 백엔드 소개

  1. Setuptools (setuptools.build_meta)
    • 가장 오래되고 전통적인 빌드 시스템
    • 호환성 광범위, 큰 생태계 지원
    • 단점: 설정 방식이 비교적 복잡, 과거 유산(setup.py)와 혼재
  2. Flit (flit_core.buildapi)
    • 단순한 패키징에 특화
    • 최소한의 설정으로 wheel 빌드 가능
    • 단점: 고급 기능(의존성 범위 지정, 가상환경 관리 등) 제한적
  3. Poetry (poetry.core.masonry.api)
    • 의존성 관리, 가상환경 관리까지 통합한 올인원 솔루션
    • 배포, 빌드, 의존성 해석까지 명령어 하나로 해결 가능
    • 단점: 설정 문법과 툴 학습 필요, 약간의 초기 러닝 커브
  4. Hatch (hatchling)
    • 최신 패키징 트렌드 반영, 릴리즈 전략, 버전 관리, 다중 환경 지원
    • pyproject.toml만으로 다양한 빌드·테스트·배포 시나리오 구성 용이
    • 단점: 도입 시 Hatch 생태계 학습 필요

빌드 백엔드 선택 기준

  • 프로젝트 규모/복잡도:
    • 단순 패키지: Flit 간단
    • 대규모 프로젝트, 의존성 해석, 배포 자동화 필요: Poetry나 Hatch 유리
  • 기존 에코시스템 호환성:
    • 오래된 코드베이스나 기존 setuptools 기반 워크플로우: Setuptools 유지
    • 신규 프로젝트, 모던 접근: Poetry나 Hatch 고려
  • 의존성 관리 편의성:
    • Poetry: pyproject.toml 하나로 의존성 해석, 가상환경 관리 자동화
    • Hatch: 다양한 릴리즈 전략, 환경별 설정 제공
  • 빌드 속도, 성능 최적화:
    • Flit: 단순 빌드에 최적, 속도 빠름
    • Hatchling: 최신 표준 적극 반영, 효율적 빌드 프로세스 제공

예제 시나리오

  • 연구용 단순 패키지: Flit 사용
    • pyproject.toml: [build-system]flit_core, [project]에 기본 메타데이터
    • flit build 명령으로 wheel 생성
  • 기업용 대규모 서비스 라이브러리: Poetry 사용
    • 의존성 락(lock) 파일로 재현성 확보
    • poetry add, poetry update로 편리한 의존성 관리
    • poetry build, poetry publish로 CI/CD 파이프라인 간소화
  • 여러 실험 환경(테스트, dev, prod) 필요: Hatch
    • pyproject.toml에서 hatch 환경 정의
    • hatch run 등 명령으로 환경별 명령어 실행
    • 복잡한 릴리즈 관리 자동화

빌드 백엔드 전환 시 전략

  • 기존 setuptools 기반 프로젝트를 Poetry로 전환 시 pyproject.toml를 작성하고 poetry init으로 의존성 변환
  • 점진적 도입: 초기에는 just 빌드 백엔드만 pyproject.toml로 설정, 이후 의존성 관리와 도구 설정 점진적 이전
  • 팀 내 표준화: 빌드 백엔드 선택, pyproject.toml 구조 합의 후 템플릿화로 새 프로젝트 생성 시 일관성 유지

결론

  • pyproject.toml 덕분에 빌드 백엔드 선택이 쉬워지고, 도구 상호 호환성 확보
  • Flit, Poetry, Hatch, Setuptools 각각 장단점이 있으니 프로젝트 목표, 팀 요구사항, 생태계 선호도 등에 따라 결정
  • 모던 Python 패키징에서는 Poetry나 Hatch 등 발전된 빌드 백엔드를 활용하는 추세

다음 글에서는 실제 예제 프로젝트를 통해 pyproject.toml 구성 전 과정을 시연하고, 빌드 백엔드 선택, 의존성 선언, 스크립트 정의, 툴 설정을 종합해보는 실습을 진행하겠습니다.

반응형