1
0

run_exe.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. """
  2. 智能股票分析助手 — PyInstaller exe 入口
  3. 使用方式:
  4. # 开发模式(不打包)
  5. python run_exe.py
  6. # PyInstaller 打包后
  7. stock_analyzer.exe
  8. 浏览器访问 http://127.0.0.1:5174/dashboard(端口可由 .env 中 BACKEND_PORT 修改)
  9. """
  10. import sys
  11. import os
  12. from pathlib import Path
  13. # PyInstaller 打包后的路径修正
  14. if getattr(sys, 'frozen', False):
  15. # _MEIPASS 是 PyInstaller 的临时解压目录
  16. _bundle = Path(getattr(sys, '_MEIPASS', Path(sys.executable).parent))
  17. _root = _bundle
  18. else:
  19. _root = Path(__file__).parent
  20. _backend = _root / "backend"
  21. _agents = _root / "agents"
  22. _hello = _root / "HelloAgents Optimized"
  23. for p in [_backend, _root, _agents, _hello]:
  24. _s = str(p)
  25. if _s not in sys.path:
  26. sys.path.insert(0, _s)
  27. import uvicorn
  28. from app.config import settings, IS_FROZEN
  29. from app.main import app
  30. if __name__ == "__main__":
  31. host = settings.BACKEND_HOST
  32. port = settings.BACKEND_PORT
  33. print(f"============================================")
  34. print(f" 智能股票分析助手")
  35. print(f" 版本: 0.1.0")
  36. print(f" 模式: {'exe 独立运行' if IS_FROZEN else '开发模式'}")
  37. print(f"============================================")
  38. # 控制台提示:监听地址可为 0.0.0.0,本机浏览器统一用 127.0.0.1
  39. _ui_host = "127.0.0.1"
  40. print(f" 后端 API: http://{_ui_host}:{port}/docs")
  41. print(f" 前端界面: http://{_ui_host}:{port}/dashboard")
  42. print(f"============================================")
  43. if IS_FROZEN:
  44. import webbrowser
  45. import threading
  46. _no_browser = os.environ.get("NO_BROWSER", "").lower() in ("1", "true", "yes")
  47. def _open_browser():
  48. import time
  49. time.sleep(1.5)
  50. webbrowser.open(f"http://{_ui_host}:{port}/dashboard")
  51. if not _no_browser:
  52. threading.Thread(target=_open_browser, daemon=True).start()
  53. print(f" 浏览器将自动打开,设置 NO_BROWSER=1 可禁用")
  54. uvicorn.run(
  55. app,
  56. host=host,
  57. port=port,
  58. log_level="info",
  59. )