PHpullh
학습 라이브러리/Python/파이썬 패키징 — pyproject.toml

PYTHON · 파일/IO

파이썬 패키징 — pyproject.toml

PEP 621 표준인 pyproject.tomlsetup.py를 대체하는 선언적 패키지 설정 파일입니다. 빌드 시스템, 의존성, 메타데이터를 하나의 파일에 정의하며, pip, poetry, hatch 등 모든 도구가 지원합니다.

파일/IO중급packagingpyprojectpipbuilddistribution

핵심 설명

PEP 621 표준인 pyproject.tomlsetup.py를 대체하는 선언적 패키지 설정 파일입니다. 빌드 시스템, 의존성, 메타데이터를 하나의 파일에 정의하며, pip, poetry, hatch 등 모든 도구가 지원합니다.

Python code

# === pyproject.toml 예제 ===
"""
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "my-awesome-lib"
version = "1.0.0"
description = "교육용 Python 패키지 예제"
readme = "README.md"
license = {text = "MIT"}
requires-python = ">=3.10"
authors = [
    {name = "홍길동", email = "hong@example.com"},
]
dependencies = [
    "requests>=2.28",
    "pydantic>=2.0",
]

[project.optional-dependencies]
dev = ["pytest>=7.0", "ruff>=0.1.0", "mypy>=1.0"]
docs = ["sphinx>=7.0", "sphinx-rtd-theme"]

[project.scripts]
my-cli = "my_awesome_lib.cli:main"

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-v --tb=short"

[tool.ruff]
target-version = "py310"
line-length = 88

[tool.mypy]
strict = true
"""

# === 패키지 구조 ===
"""
my-awesome-lib/
├── pyproject.toml
├── README.md
├── src/
│   └── my_awesome_lib/
│       ├── __init__.py
│       ├── cli.py
│       └── core.py
└── tests/
    ├── __init__.py
    └── test_core.py
"""

# === 빌드 & 배포 명령어 ===
import subprocess, sys

commands = {
    "개발 모드 설치": "pip install -e '.[dev]'",
    "패키지 빌드":    "python -m build",
    "PyPI 업로드":   "python -m twine upload dist/*",
    "린트 검사":     "ruff check src/",
    "타입 검사":     "mypy src/",
    "테스트 실행":    "pytest",
}

print("패키징 워크플로우:")
for name, cmd in commands.items():
    print(f"  {name}: {cmd}")

# 실제 사용 예: 현재 환경의 패키지 정보
from importlib.metadata import version, requires
try:
    pip_ver = version("pip")
    print(f"\npip 버전: {pip_ver}")
except Exception:
    print("\npip 정보를 가져올 수 없습니다")

학습 팁

src/ 레이아웃을 사용하면 개발 중에 설치되지 않은 패키지를 실수로 import하는 것을 방지합니다. pip install -e .으로 editable 설치하면 코드 변경이 즉시 반영됩니다.

주의할 점

setup.pypyproject.toml을 동시에 사용하면 설정이 충돌할 수 있습니다. 새 프로젝트는 pyproject.toml만 사용하고, 기존 프로젝트는 점진적으로 마이그레이션하세요.

자주 묻는 질문

파이썬 패키징 — pyproject.toml란 무엇인가요?

PEP 621 표준인 pyproject.toml 은 setup.py 를 대체하는 선언적 패키지 설정 파일입니다. 빌드 시스템, 의존성, 메타데이터를 하나의 파일에 정의하며, pip, poetry, hatch 등 모든 도구가 지원합니다.

파이썬 패키징 — pyproject.toml 학습 시 주의할 점은 무엇인가요?

setup.py 와 pyproject.toml 을 동시에 사용하면 설정이 충돌할 수 있습니다. 새 프로젝트는 pyproject.toml 만 사용하고, 기존 프로젝트는 점진적으로 마이그레이션하세요.