import sys from cx_Freeze import setup, Executable import os # 1. 포함할 파일 및 폴더 정의 # (소스 경로, 대상 경로) 튜플 또는 경로 문자열 include_files = [ ("assets/", "assets/"), ("data/", "data/"), ("updater/config.json", "app/updater/config.json"), ] # updater.exe 통합 (사전 빌드 산출물) updater_exe_src = os.path.join("updater_build", "dist", "updater.exe") if os.path.exists(updater_exe_src): include_files.append((updater_exe_src, "updater.exe")) else: print("[setup.py] WARNING: updater.exe not found. Run 'python app/update_build_setup.py' first.") # 2. 제외할 모듈 (용량 최적화용) excludes = ["tkinter.test", "unittest"] # 3. 필수 패키지 (자동 감지가 안될 경우 명시) packages = [ "os", "sys", "json", "time", "threading", "schedule", "customtkinter", "PIL", "pystray", "DrissionPage", "tkcalendar", "selectolax", "winotify", "pywin32_system32", "services", "utils", "view", "models", "requests", "urllib3", "holidays", "matplotlib", # 차트 생성 "openpyxl", # Excel 보고서 "reportlab", # PDF 보고서 "wordcloud", # 워드클라우드 # "pandas" ] # 4. GUI 애플리케이션 설정 (Windows에서 콘솔 창 숨기기) base = None if sys.platform == "win32": base = "Win32GUI" # 5. 실행 파일 설정 executable = Executable( script="main.py", base=base, target_name="VOC_Monitor.exe", icon="assets/app_icon.ico" # 아이콘이 있다면 지정 ) # 6. Setup 실행 setup( name="VOC_Notification_System", version="1.0", description="부산교통공사 VOC 모니터링 및 보고서 자동화 시스템", options={ "build_exe": { "packages": packages, "excludes": excludes, "include_files": include_files, # "include_msvcr": True, # 필요한 경우 활성화 } }, executables=[executable] )