# app_loader.py —— 建议版本(带 debug log) import os import sys from pathlib import Path from huggingface_hub import snapshot_download import importlib.util # 这里用你的真实私有 model 仓库 ID PRIVATE_REPO_ID = "Bing91/my-trading-web-app" # 按实际改 def main(): print("[loader] starting loader...", flush=True) token = os.environ.get("HF_TOKEN") if not token: raise RuntimeError("环境变量 HF_TOKEN 未设置(Space 的 Secrets 里要配置 HF_TOKEN)") print(f"[loader] using PRIVATE_REPO_ID={PRIVATE_REPO_ID}", flush=True) local_dir = snapshot_download( repo_id=PRIVATE_REPO_ID, token=token, repo_type="model", ) print(f"[loader] snapshot downloaded to: {local_dir}", flush=True) # 给 app.py 里用 hf_hub_download 的代码用(未来你换回大 app 时要用到) os.environ.setdefault("HUGGINGFACEHUB_API_TOKEN", token) app_path = Path(local_dir) / "app.py" if not app_path.exists(): children = [p.name for p in Path(local_dir).iterdir()] raise FileNotFoundError(f"在 {local_dir} 下找不到 app.py,当前文件有: {children}") print(f"[loader] loading module from: {app_path}", flush=True) # 像普通模块一样 import,然后调用 main() spec = importlib.util.spec_from_file_location("private_app", app_path) module = importlib.util.module_from_spec(spec) sys.modules["private_app"] = module spec.loader.exec_module(module) print("[loader] module imported, checking main() ...", flush=True) if hasattr(module, "main"): print("[loader] calling main() ...", flush=True) module.main() print("[loader] main() returned (this usually shouldn't happen with Gradio)", flush=True) else: raise RuntimeError("app.py 中没有找到 main() 函数") if __name__ == "__main__": main()