| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #!/usr/bin/env python3
- """启动 3D 服务端。
- 用法:
- python3 3d/backend/run.py # 默认 127.0.0.1:5182
- python3 3d/backend/run.py --port 9100 --reload
- """
- import argparse
- import sys
- from pathlib import Path
- BASE_DIR = Path(__file__).resolve().parent
- sys.path.insert(0, str(BASE_DIR))
- def _require_dependencies() -> None:
- missing = [name for name in ("fastapi", "uvicorn") if _importable(name) is None]
- if not missing:
- return
- req = BASE_DIR / "requirements.txt"
- sys.stderr.write(
- "\n[启动失败] 当前 Python 缺少依赖: " + ", ".join(missing) + "\n"
- f" 当前解释器: {sys.executable}\n"
- f" 版本: {sys.version.split()[0]}\n"
- f" 安装依赖: {sys.executable} -m pip install -r {req}\n"
- "\n提示:如果 `python3` 指向系统解释器(如 /usr/bin/python3),\n"
- "请先激活项目环境(conda activate compressor-wave),\n"
- "或用 conda run -n compressor-wave python3 3d/backend/run.py 运行。\n",
- )
- raise SystemExit(1)
- def _importable(name: str):
- try:
- return __import__(name)
- except ImportError:
- return None
- def main() -> None:
- _require_dependencies()
- import uvicorn
- parser = argparse.ArgumentParser(description="压缩机 3D 部件查看服务")
- parser.add_argument("--host", default="127.0.0.1")
- parser.add_argument("--port", type=int, default=5182)
- parser.add_argument("--reload", action="store_true")
- args = parser.parse_args()
- uvicorn.run("main:app", host=args.host, port=args.port, reload=args.reload)
- if __name__ == "__main__":
- main()
|