| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- """
- 智能股票分析助手 — PyInstaller exe 入口
- 使用方式:
- # 开发模式(不打包)
- python run_exe.py
- # PyInstaller 打包后
- stock_analyzer.exe
- 浏览器访问 http://127.0.0.1:5174/dashboard(端口可由 .env 中 BACKEND_PORT 修改)
- """
- import sys
- import os
- from pathlib import Path
- # PyInstaller 打包后的路径修正
- if getattr(sys, 'frozen', False):
- # _MEIPASS 是 PyInstaller 的临时解压目录
- _bundle = Path(getattr(sys, '_MEIPASS', Path(sys.executable).parent))
- _root = _bundle
- else:
- _root = Path(__file__).parent
- _backend = _root / "backend"
- _agents = _root / "agents"
- _hello = _root / "HelloAgents Optimized"
- for p in [_backend, _root, _agents, _hello]:
- _s = str(p)
- if _s not in sys.path:
- sys.path.insert(0, _s)
- import uvicorn
- from app.config import settings, IS_FROZEN
- from app.main import app
- if __name__ == "__main__":
- host = settings.BACKEND_HOST
- port = settings.BACKEND_PORT
- print(f"============================================")
- print(f" 智能股票分析助手")
- print(f" 版本: 0.1.0")
- print(f" 模式: {'exe 独立运行' if IS_FROZEN else '开发模式'}")
- print(f"============================================")
- # 控制台提示:监听地址可为 0.0.0.0,本机浏览器统一用 127.0.0.1
- _ui_host = "127.0.0.1"
- print(f" 后端 API: http://{_ui_host}:{port}/docs")
- print(f" 前端界面: http://{_ui_host}:{port}/dashboard")
- print(f"============================================")
- if IS_FROZEN:
- import webbrowser
- import threading
- _no_browser = os.environ.get("NO_BROWSER", "").lower() in ("1", "true", "yes")
- def _open_browser():
- import time
- time.sleep(1.5)
- webbrowser.open(f"http://{_ui_host}:{port}/dashboard")
- if not _no_browser:
- threading.Thread(target=_open_browser, daemon=True).start()
- print(f" 浏览器将自动打开,设置 NO_BROWSER=1 可禁用")
- uvicorn.run(
- app,
- host=host,
- port=port,
- log_level="info",
- )
|