run.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env python3
  2. """PaperGraph Backend 启动脚本"""
  3. import logging
  4. import os
  5. import sys
  6. os.environ.setdefault("FZ_LOAD_SYSTEM_CMS", "0") # 抑制 MuPDF/PyMuPDF ICC 颜色配置缺失警告
  7. # PaperGraph 根目录(含 papergraph/ 包):开发时可在该目录执行 pip install -e . 替代仅靠 sys.path
  8. PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  9. if PROJECT_ROOT not in sys.path:
  10. sys.path.insert(0, PROJECT_ROOT)
  11. from app.settings import configure_logging, get_settings
  12. if __name__ == "__main__":
  13. import uvicorn
  14. settings = get_settings()
  15. configure_logging(settings.log_level)
  16. logger = logging.getLogger(__name__)
  17. logger.info("🚀 启动 %s...", settings.app_name)
  18. # 说明:
  19. # - 开发模式 settings.debug=True 时,uvicorn 会开启 reload(WatchFiles)自动重启。
  20. # - 但流式接口(SSE)在重启窗口会触发前端报错:BodyStreamBuffer was aborted / ECONNRESET。
  21. # - 因此提供显式开关:PAPERGRAPH_UVICORN_RELOAD=0 可在 debug=True 时也关闭热重载,便于稳定测试。
  22. reload_flag = settings.debug
  23. env_reload = (os.getenv("PAPERGRAPH_UVICORN_RELOAD") or "").strip().lower()
  24. if env_reload in ("0", "false", "no", "off"):
  25. reload_flag = False
  26. elif env_reload in ("1", "true", "yes", "on"):
  27. reload_flag = True
  28. uvicorn.run(
  29. "app.api.main:app",
  30. host=settings.host,
  31. port=settings.port,
  32. reload=reload_flag,
  33. log_level="info"
  34. )