pyproject.toml (PEP 517 / 518 / 621) 이 현대 Python 프로젝트 파일. setup.py, setup.cfg, 도구별 config 파일 12 개 대체. 안에 — 빌드 시스템, 패키지 메타데이터 (이름, 버전, 의존성), 도구 설정 (ruff, mypy, pytest 등).
두 핵심 섹션
[build-system] 이 pip 한테 패키지 빌드 방법 알려줌 — 빌드 backend (예 hatchling, setuptools, poetry-core). [project] 가 메타데이터 — 이름, 버전, 설명, 의존성, Python 버전 요구사항, 라이선스. 도구 섹션 ([tool.ruff], [tool.mypy] 등) 옵션.
의존성 — pin 됐 vs 안 됐
[project.dependencies] 에 런타임 의존성. 라이브러리엔 loosely pin (requests >= 2.31) — 너무 pin 하면 모두와 호환 X. 애플리케이션엔 tightly pin (requests == 2.31.0) — 재현 가능 deploy 원함. dev-only deps (pytest, ruff) 엔 [project.optional-dependencies.dev].
Editable install — dev 패턴
pip install -e . (또는 uv pip install -e .) 가 패키지를 "editable" 모드로 설치 — Python 이 소스 디렉토리에서 import, 편집이 즉시 반영, 재설치 X. 패키지 개발 시 필수.
Pythonic Way: 모든 Python 프로젝트가 pyproject.toml 가짐, 작아도. 도구 설정 (ruff/mypy/pytest) 의 정석 위치, 모든 현대 도구가 거기서 읽음. 새 프로젝트엔 setup.py deprecated.