키는 코드/커밋이 아닌 환경변수로 주입한다(감사: 시크릿 하드코딩 금지). config.local.toml=비-시크릿 설정, .env=시크릿으로 분리. - .env.example(템플릿, 커밋) + .env(로컬, 미추적)로 키 슬롯 제공 · NAVER_CLIENT_ID/SECRET(+로테이션 _2..), OPENAI_API_KEY, AZURE_OPENAI_* - server_configs 가 기동 시 lps/.env 를 load_dotenv 로 환경변수 주입 - requirements: python-dotenv 추가 - README: .env 셋업 단계 안내 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
17 lines
1000 B
Plaintext
17 lines
1000 B
Plaintext
fastapi
|
|
uvicorn[standard]
|
|
sqlalchemy>=2.0
|
|
greenlet # SQLAlchemy async 의 sync/async 브리지에 필수 (일부 환경에서 자동 설치 누락됨)
|
|
asyncpg
|
|
orjson
|
|
pydantic>=2.0
|
|
python-dotenv # .env(시크릿: API 키) 로드 — server_configs 에서 환경변수로 주입
|
|
httpx # 외부 사이트/오픈API(최저가 조회) 호출용 async HTTP 클라이언트
|
|
|
|
# --- 크롤링(LPS) — 안티봇 대응은 어댑터 안에 격리. 트레드밀 대비 버전 pin. ---
|
|
curl_cffi==0.15.0 # 쿠팡: TLS/HTTP2 지문 위장(impersonate) async HTTP 클라이언트
|
|
selectolax==0.4.10 # 빠른 C 파서(쿠팡 HTML). bs4 대비 최대 30배
|
|
patchright # 스텔스 Playwright 포크. 쿠팡 Akamai JS 챌린지 통과(실제 Chrome, channel=chrome)
|
|
# ※ nodriver 는 Python 3.14 소스인코딩 버그로 미채택 → Patchright 로 대체
|
|
# ※ 실행엔 시스템 Google Chrome 필요(로컬) / 배포 이미지엔 chromium 설치 필요
|