DMF_Crawler/pyproject.toml
Yun Chan 56a6e2da93 chore: 저장소 구조 정리 및 문서화, 첫 커밋
- src/dist 산출물 분리 원칙 정리(.gitignore, .gitattributes)
- 루트 및 주요 폴더(config/scripts/prompts/tests/src, 런타임 폴더 5종)에
  안내용 README.md 추가
- CHANGELOG.md, LICENSE, docs/ops/05-release-and-versioning.md 추가
- docs/README.md 문서 지도 갱신
2026-09-04 09:25:44 +09:00

64 lines
2.6 KiB
TOML

# =============================================================================
# pyproject.toml — 패키지 메타 · 의존성 · 진입점 · 테스트 설정
# =============================================================================
# 런타임 의존성은 3개로 고정한다(아키텍처 §8). 의존성 하나는 곧
# "6개월 뒤 pip install 이 실패할 확률 하나" 다.
# ▸ pandas · openpyxl · PyYAML · requests · pydantic 은 명시적으로 기각했다.
# ▸ 설정(tomllib) · DB(sqlite3) · GUI(tkinter) · 암호화(ctypes+DPAPI) ·
# 락(msvcrt) · CLI(argparse) 는 전부 표준 라이브러리로 해결한다.
# =============================================================================
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[project]
name = "dmf-crawler"
version = "0.1.0"
description = "식약처 원료의약품등록(DMF) 현황을 매일 수집해 변경을 탐지하고 엑셀 리포트를 만드는 무인 도구"
readme = "README.md"
requires-python = ">=3.11"
license = { text = "Proprietary" }
keywords = ["dmf", "mfds", "pharma", "crawler", "xlsx", "korea"]
classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Operating System :: Microsoft :: Windows :: Windows 11",
"Natural Language :: Korean",
"Private :: Do Not Upload",
]
# 런타임 의존성 3개. 상한을 고정해 상위 버전의 파괴적 변경으로부터 무인 실행을 지킨다.
dependencies = [
"httpx>=0.27,<1.0", # 유일한 HTTP 창구. 연결/읽기 타임아웃 분리가 가능하다
"XlsxWriter>=3.2,<4.0", # xlsx 생성 전담. 스파크라인·수식 캐시값은 이 라이브러리에만 있다
"jsonschema>=4.21,<5.0", # agy 응답 자체 검증. 손으로 짜면 반드시 틀리는 부분
]
[project.optional-dependencies]
dev = [
"pytest>=8.0,<9.0",
]
[project.scripts]
dmf = "dmf_crawler.cli:main"
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
# 마이그레이션 SQL 은 패키지 안에 있으므로 함께 배포한다.
"dmf_crawler.storage" = ["migrations/*.sql"]
[tool.pytest.ini_options]
minversion = "8.0"
testpaths = ["tests"]
pythonpath = ["src"]
addopts = "-ra --strict-markers --strict-config"
filterwarnings = ["error::DeprecationWarning"]
markers = [
"slow: 실행이 오래 걸리는 테스트",
"windows: Windows 에서만 의미가 있는 테스트(DPAPI·msvcrt·작업 스케줄러)",
"network: 실제 네트워크가 필요한 테스트. 기본 실행에서는 제외한다",
]