Spaces:
Sleeping
Sleeping
Create loader.py
Browse files
loader.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import subprocess
|
| 3 |
+
import sys
|
| 4 |
+
from huggingface_hub import snapshot_download
|
| 5 |
+
|
| 6 |
+
# ================= 配置部分 =================
|
| 7 |
+
# 填写你的私有仓库地址,格式:用户名/仓库名
|
| 8 |
+
PRIVATE_REPO_ID = "HongshengY/NeuralSketch2Surf"
|
| 9 |
+
|
| 10 |
+
# 获取 Secret Token (需要在 Space Settings -> Secrets 中设置 HF_TOKEN)
|
| 11 |
+
HF_TOKEN = os.environ.get("HF_TOKEN")
|
| 12 |
+
|
| 13 |
+
def main():
|
| 14 |
+
if not HF_TOKEN:
|
| 15 |
+
print("❌ 错误: 未检测到 HF_TOKEN。请在 Settings -> Secrets 中添加。")
|
| 16 |
+
sys.exit(1)
|
| 17 |
+
|
| 18 |
+
print(f"🚀 正在从私有仓库 {PRIVATE_REPO_ID} 加载代码...")
|
| 19 |
+
|
| 20 |
+
try:
|
| 21 |
+
# 1. 下载私有仓库的所有文件到当前目录 (/app)
|
| 22 |
+
snapshot_download(
|
| 23 |
+
repo_id=PRIVATE_REPO_ID,
|
| 24 |
+
repo_type="space",
|
| 25 |
+
local_dir=".",
|
| 26 |
+
token=HF_TOKEN,
|
| 27 |
+
# 排除不必要的文件以加快下载
|
| 28 |
+
ignore_patterns=[".gitattributes", "README.md", ".git/*"]
|
| 29 |
+
)
|
| 30 |
+
print("✅ 代码与模型下载完成!")
|
| 31 |
+
|
| 32 |
+
# 2. 安装依赖
|
| 33 |
+
# 虽然 Dockerfile 会预装一些,但为了确保版本匹配,还是跑一下 requirements.txt
|
| 34 |
+
if os.path.exists("backend/requirements.txt"):
|
| 35 |
+
print("📦 正在检查并安装 backend/requirements.txt...")
|
| 36 |
+
subprocess.run([sys.executable, "-m", "pip", "install", "-r", "backend/requirements.txt"], check=True)
|
| 37 |
+
|
| 38 |
+
# 3. 启动 FastAPI 应用
|
| 39 |
+
# 对应你 README 中的启动命令:uvicorn backend.server:app --host 0.0.0.0 --port 7860
|
| 40 |
+
print("🔥 正在启动 NeuralSketch2Surf Web...")
|
| 41 |
+
|
| 42 |
+
# 构造启动命令
|
| 43 |
+
# 注意:Hugging Face Spaces 强制要求监听 7860 端口
|
| 44 |
+
cmd = [
|
| 45 |
+
"uvicorn",
|
| 46 |
+
"backend.server:app",
|
| 47 |
+
"--host", "0.0.0.0",
|
| 48 |
+
"--port", "7860"
|
| 49 |
+
]
|
| 50 |
+
|
| 51 |
+
# 使用 exec 替换当前进程,这样 uvicorn 就会成为 PID 1,接收所有信号
|
| 52 |
+
os.execvp("uvicorn", cmd)
|
| 53 |
+
|
| 54 |
+
except Exception as e:
|
| 55 |
+
print(f"❌ 发生错误: {e}")
|
| 56 |
+
sys.exit(1)
|
| 57 |
+
|
| 58 |
+
if __name__ == "__main__":
|
| 59 |
+
main()
|