run.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python3
  2. """启动 3D 服务端。
  3. 用法:
  4. python3 viewer/backend/run.py # 默认 127.0.0.1:5182
  5. python3 viewer/backend/run.py --port 9100 --reload
  6. """
  7. import argparse
  8. import sys
  9. from pathlib import Path
  10. BASE_DIR = Path(__file__).resolve().parent
  11. sys.path.insert(0, str(BASE_DIR))
  12. def _require_dependencies() -> None:
  13. missing = [name for name in ("fastapi", "uvicorn") if _importable(name) is None]
  14. if not missing:
  15. return
  16. req = BASE_DIR / "requirements.txt"
  17. sys.stderr.write(
  18. "\n[启动失败] 当前 Python 缺少依赖: " + ", ".join(missing) + "\n"
  19. f" 当前解释器: {sys.executable}\n"
  20. f" 版本: {sys.version.split()[0]}\n"
  21. f" 安装依赖: {sys.executable} -m pip install -r {req}\n"
  22. "\n提示:如果 `python3` 指向系统解释器(如 /usr/bin/python3),\n"
  23. "请先激活项目环境(conda activate compressor-wave),\n"
  24. "或用 conda run -n compressor-wave python3 viewer/backend/run.py 运行。\n",
  25. )
  26. raise SystemExit(1)
  27. def _importable(name: str):
  28. try:
  29. return __import__(name)
  30. except ImportError:
  31. return None
  32. def main() -> None:
  33. _require_dependencies()
  34. import uvicorn
  35. parser = argparse.ArgumentParser(description="压缩机 3D 部件查看服务")
  36. parser.add_argument("--host", default="127.0.0.1")
  37. parser.add_argument("--port", type=int, default=5182)
  38. parser.add_argument("--reload", action="store_true")
  39. args = parser.parse_args()
  40. uvicorn.run("main:app", host=args.host, port=args.port, reload=args.reload)
  41. if __name__ == "__main__":
  42. main()