setup.cfg vs. pyproject.toml
setup.cfg와 pyproject.toml은 Python 프로젝트의 구성과 메타데이터를 정의하는 파일 형식이다.
이 두 파일은 프로젝트 설정, 의존성, 빌드 시스템 등을 관리하는 데 사용되며, 각각의 특징과 용도가 있다.
setup.cfg는 setuptools를 사용하는 전통적인 Python 패키징 시스템의 일부이다.
- 형식: INI 스타일의 설정 파일
- 주요 용도:
- 프로젝트 메타데이터 정의 (이름, 버전, 설명 등)
- 의존성 선언
- 패키지 데이터 및 스크립트 설정
- 특징:
- setup.py와 함께 사용되어 왔음
- 정적 메타데이터를 선언적으로 정의하는 데 적합
- 레거시 도구와의 호환성 유지
pyproject.toml은 PEP 518에서 도입된 새로운 표준 구성 파일이다.
- 형식: TOML (Tom’s Obvious, Minimal Language)
- 주요 용도:
- 빌드 시스템 요구사항 정의
- 프로젝트 메타데이터 정의
- 다양한 개발 도구 설정 (예: Black, Pytest, Mypy 등)
- 특징:
- 모던한 Python 패키징 시스템의 중심
- 빌드 격리 지원
- 다양한 빌드 백엔드 지원 (setuptools, poetry, flit 등)
- 단일 파일에서 프로젝트 전체 설정 관리 가능
주요 차이점:
- 표준화: pyproject.toml은 PEP 518, 621 등에 의해 표준화되어 있어 도구 간 호환성이 높다.
- 유연성: pyproject.toml은 빌드 시스템과 도구 설정을 더 유연하게 관리할 수 있다.
- 확장성: pyproject.toml은 다양한 도구의 설정을 통합할 수 있어 설정 파일 수를 줄일 수 있다.
- 현대화: pyproject.toml은 최신 Python 패키징 생태계의 트렌드를 반영하고 있다.
- 호환성: setup.cfg는 레거시 시스템과의 호환성이 더 좋다.
현재 Python 커뮤니티는 점진적으로 pyproject.toml로 이동하는 추세이지만, 많은 프로젝트들이 여전히 setup.cfg를 사용하고 있다.
새로운 프로젝트를 시작할 때는 pyproject.toml을 사용하는 것이 권장되며, 기존 프로젝트는 필요에 따라 점진적으로 마이그레이션할 수 있다.
특성 | setup.cfg | pyproject.toml |
---|---|---|
파일 형식 | INI 형식 | TOML 형식 |
도입 시기 | Python의 전통적인 설정 파일 | PEP 518에서 도입 (2016년) |
주요 목적 | - 패키지 빌드 설정 - 개발 도구 설정 - 프로젝트 메타데이터 관리 | - 빌드 시스템 요구사항 정의 - 프로젝트 전반의 설정 통합 - 현대적 빌드 도구 지원 |
문법 특징 | - 단순한 키-값 구조 - 섹션 기반 구성 - 제한된 데이터 타입 - 들여쓰기로 계층 표현 | - 더 풍부한 데이터 타입 - 명확한 계층 구조 - 배열과 테이블 지원 UTF-8 지원 |
도구 지원 | - setuptools flake8 pytest coverage mypy (기존 도구) | - poetry black isort pytest mypy (새로운 도구) |
구성 가능성 | - 기본적인 설정 옵션 - 제한된 확장성 - 단순한 값만 지원 | - 복잡한 설정 가능 - 높은 확장성 - 다양한 데이터 구조 지원 |
호환성 | - 레거시 도구와 호환 - 광범위한 지원 - 안정적인 생태계 | - 최신 도구와 호환 - 점진적으로 증가하는 지원 - 현대적인 생태계 |
사용 추천 | - 레거시 프로젝트 - 간단한 설정 필요 - 기존 도구 사용 | - 새로운 프로젝트 - 현대적 도구 사용 - 복잡한 설정 필요 |
장점 | - 단순한 구문 - 널리 사용됨 - 안정적 - 학습 곡선 낮음 | - 강력한 기능 - 타입 안전 - 현대적 표준 - 통합된 설정 |
단점 | - 제한된 기능 - 복잡한 설정 어려움 - 오래된 형식 | - 학습 곡선 높음 - 일부 도구 미지원 - 상대적으로 새로움 |
파이썬 버전 | 모든 버전 지원 | Python 3.5+ 권장 |
주요 사용례 | - 기본 패키지 메타데이터 - 간단한 도구 설정 - 배포 설정 | - 의존성 관리 - 빌드 시스템 설정 - 개발 도구 통합 설정 |
미래 전망 | - 점진적으로 감소 - 레거시 지원 유지 - 안정적 유지 | - 사용 증가 - 기능 확장 - 표준화 진행 |
설정 파일 비교
setup.cfg 예시
pyproject.toml 예시
|
|