본문 바로가기
개발

setup.py와 pyproject.toml 차이

by Kyutree 2026. 2. 4.

파이썬 프로젝트를 관리할 때, `setup.py`와 `pyproject.toml` 중 어떤 파일을 사용해야 할지 고민해 본 적 있으신가요?

최근 파이썬 패키징 방식이 변화하면서, `pyproject.toml`이 `setup.py`의 단점을 보완하고 더 현대적인 방식으로 프로젝트를 관리할 수 있도록 돕고 있습니다.

 

setup.py의 역할과 한계

 

`setup.py`는 과거부터 파이썬 프로젝트의 빌드, 배포, 의존성 관리를 위한 표준적인 방법으로 사용되어 왔습니다.

하지만 `setup.py`는 빌드 프론트엔드와 백엔드를 모두 수행해야 하는 구조적인 문제점을 가지고 있습니다.

이로 인해 패키징 과정이 복잡해지고, "닭이 먼저냐, 달걀이 먼저냐"와 같은 의존성 순환 문제가 발생하기도 했습니다.

 

pyproject.toml의 등장 배경

 

`pyproject.toml`은 이러한 `setup.py`의 문제점을 해결하기 위해 등장했습니다.

파이썬 패키징을 위한 설정 파일로, 프로젝트의 메타데이터, 의존성, 빌드 시스템 설정 등을 명확하게 정의할 수 있습니다.

`pyproject.toml`은 Poetry와 같은 최신 도구와 함께 사용될 때 더욱 강력한 기능을 발휘합니다.

 

pyproject.toml의 주요 기능

 

`pyproject.toml`은 다음과 같은 주요 기능을 제공합니다.

 

프로젝트 메타데이터 관리: 패키지의 이름, 버전, 작성자, 라이선스 등 프로젝트에 대한 기본적인 정보를 담고 있습니다.

의존성 관리: 프로젝트가 의존하는 패키지 목록과 버전을 명시하여, 의존성 관리를 용이하게 합니다.

    `requirements.txt`와 달리, 개발 의존성과 런타임 의존성을 분리하여 관리할 수 있습니다.

빌드 시스템 설정: 어떤 빌드 시스템(예: setuptools, Poetry)을 사용할지 설정하고, 빌드 과정을 커스터마이징할 수 있습니다.

파이썬 버전 명시: 프로젝트가 지원하는 파이썬 버전을 명시하여, 호환성 문제를 방지할 수 있습니다.

어플리케이션 엔트리포인트 설정: 어플리케이션의 진입점을 설정하여, 실행 파일을 쉽게 만들 수 있습니다.

 

requirements.txt와의 차이점

 

`requirements.txt`는 `pip`를 통해 의존성을 설치할 때 사용되는 간단한 의존성 목록 관리 파일입니다.

반면, `pyproject.toml`은 프로젝트 메타데이터, 의존성, 빌드 시스템 설정을 포함하는 더 포괄적인 설정 파일입니다.

`requirements.txt`는 단순히 의존성 목록만 관리하지만, `pyproject.toml`은 프로젝트의 빌드와 배포 전반에 걸친 설정을 관리할 수 있습니다.

 

pyproject.toml 사용의 장점

 

`pyproject.toml`을 사용하면 다음과 같은 장점을 얻을 수 있습니다.

 

명확하고 일관된 설정: 프로젝트의 모든 설정이 하나의 파일에 집중되어 있어, 설정 관리가 용이합니다.

의존성 관리의 효율성: 개발 의존성과 런타임 의존성을 분리하여 관리함으로써, 의존성 충돌을 방지하고 빌드 환경을 더 깔끔하게 유지할 수 있습니다.

최신 도구와의 통합: Poetry, Pipenv 등 최신 파이썬 패키징 도구와 완벽하게 통합되어, 더 편리하고 효율적인 개발 환경을 구축할 수 있습니다.

재현 가능한 빌드: 빌드 환경을 명확하게 정의하여, 언제 어디서든 동일한 결과물을 얻을 수 있습니다.

 

`setup.py`에서 `pyproject.toml`로 전환하는 것은 파이썬 프로젝트를 더욱 체계적이고 효율적으로 관리하는 데 도움이 됩니다.

최근 파이썬 생태계는 `pyproject.toml`을 중심으로 발전하고 있으므로, 새로운 프로젝트를 시작하거나 기존 프로젝트를 개선할 때 `pyproject.toml`을 적극적으로 활용해 보는 것을 추천합니다.

`pyproject.toml`과 Poetry와 같은 도구를 함께 사용하면 파이썬 패키징의 복잡성을 줄이고, 개발 생산성을 향상시킬 수 있습니다.