Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,61 +1,65 @@
|
|
|
|
|
| 1 |
import sys
|
| 2 |
-
|
|
|
|
|
|
|
|
|
|
| 3 |
|
| 4 |
-
# --- 🧪
|
| 5 |
def mock_diso():
|
|
|
|
| 6 |
print("🧪 Creating emergency mock for diso...")
|
| 7 |
-
|
| 8 |
-
# 1. 创建基础模块对象
|
| 9 |
diso = ModuleType("diso")
|
| 10 |
-
# 2. 伪造 DiffDMC 类
|
| 11 |
-
# PartCrafter 调用它通常是为了从网格提取几何,我们给它一个空的实现
|
| 12 |
-
# 如果后续运行报错缺少某个方法,我们再补。通常它是被导入但未被深度调用。
|
| 13 |
class FakeDiffDMC:
|
| 14 |
def __init__(self, *args, **kwargs): pass
|
| 15 |
def __call__(self, *args, **kwargs): return None
|
| 16 |
-
|
| 17 |
diso.DiffDMC = FakeDiffDMC
|
| 18 |
-
|
| 19 |
-
# 3. 注入系统路径,防止其他地方再次触发 import
|
| 20 |
sys.modules["diso"] = diso
|
| 21 |
-
# 针对 diso._C 的报错,也伪造一个空模块
|
| 22 |
sys.modules["diso._C"] = ModuleType("diso._C")
|
| 23 |
-
|
| 24 |
print("✅ diso has been mocked successfully!")
|
| 25 |
|
| 26 |
mock_diso()
|
| 27 |
|
| 28 |
-
# ---
|
| 29 |
def install_essential_packages():
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
subprocess.run([
|
| 32 |
sys.executable, "-m", "pip", "install",
|
| 33 |
"torch-scatter", "torch-sparse", "torch-cluster",
|
| 34 |
-
"-f", "https://data.pyg.org/whl/torch-2.4.0+cu121.html"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
])
|
| 36 |
-
|
| 37 |
-
|
|
|
|
|
|
|
| 38 |
|
| 39 |
install_essential_packages()
|
| 40 |
|
| 41 |
-
# ---
|
| 42 |
-
from src.pipelines.pipeline_partcrafter import PartCrafterPipeline
|
| 43 |
-
# ... 后续代码 ...
|
| 44 |
-
|
| 45 |
import spaces
|
| 46 |
import gradio as gr
|
| 47 |
-
import os
|
| 48 |
-
# import sys
|
| 49 |
-
import subprocess
|
| 50 |
-
import importlib
|
| 51 |
-
import site
|
| 52 |
-
import time
|
| 53 |
-
from glob import glob
|
| 54 |
-
from typing import Any, Union
|
| 55 |
import numpy as np
|
| 56 |
import torch
|
| 57 |
import uuid
|
| 58 |
import shutil
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
|
| 60 |
# --- 🚀 核心修复:强制版本回退以避开编译 ---
|
| 61 |
def pre_install_check():
|
|
|
|
| 1 |
+
import os
|
| 2 |
import sys
|
| 3 |
+
import subprocess # <--- 确保这行在这里!
|
| 4 |
+
import importlib
|
| 5 |
+
import site
|
| 6 |
+
import time
|
| 7 |
|
| 8 |
+
# --- 🧪 1. 内存级伪造 diso (必须在任何业务 import 之前) ---
|
| 9 |
def mock_diso():
|
| 10 |
+
from types import ModuleType
|
| 11 |
print("🧪 Creating emergency mock for diso...")
|
|
|
|
|
|
|
| 12 |
diso = ModuleType("diso")
|
|
|
|
|
|
|
|
|
|
| 13 |
class FakeDiffDMC:
|
| 14 |
def __init__(self, *args, **kwargs): pass
|
| 15 |
def __call__(self, *args, **kwargs): return None
|
|
|
|
| 16 |
diso.DiffDMC = FakeDiffDMC
|
|
|
|
|
|
|
| 17 |
sys.modules["diso"] = diso
|
|
|
|
| 18 |
sys.modules["diso._C"] = ModuleType("diso._C")
|
| 19 |
+
sys.modules["diso.diso_native"] = ModuleType("diso.diso_native")
|
| 20 |
print("✅ diso has been mocked successfully!")
|
| 21 |
|
| 22 |
mock_diso()
|
| 23 |
|
| 24 |
+
# --- 🚀 2. 极速环境安装 (已经成功的 scatter/sparse) ---
|
| 25 |
def install_essential_packages():
|
| 26 |
+
print("📦 Checking core dependencies...")
|
| 27 |
+
# 确保基础环境正确
|
| 28 |
+
subprocess.run([sys.executable, "-m", "pip", "install", "ninja", "setuptools", "wheel", "-q"])
|
| 29 |
+
|
| 30 |
+
# 极速安装 PyG 扩展
|
| 31 |
subprocess.run([
|
| 32 |
sys.executable, "-m", "pip", "install",
|
| 33 |
"torch-scatter", "torch-sparse", "torch-cluster",
|
| 34 |
+
"-f", "https://data.pyg.org/whl/torch-2.4.0+cu121.html",
|
| 35 |
+
"--no-cache-dir"
|
| 36 |
+
])
|
| 37 |
+
|
| 38 |
+
# 安装剩下的渲染工具
|
| 39 |
+
subprocess.run([
|
| 40 |
+
sys.executable, "-m", "pip", "install",
|
| 41 |
+
"pyrender", "pyopengl==3.1.0", "pyyaml", "trimesh", "accelerate", "-q"
|
| 42 |
])
|
| 43 |
+
|
| 44 |
+
importlib.invalidate_caches()
|
| 45 |
+
site.main()
|
| 46 |
+
print("🎉 Environment Installation Phase Finished.")
|
| 47 |
|
| 48 |
install_essential_packages()
|
| 49 |
|
| 50 |
+
# --- 3. 正式导入业务逻辑 (现在开始这几百行代码就不会报错了) ---
|
|
|
|
|
|
|
|
|
|
| 51 |
import spaces
|
| 52 |
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
import numpy as np
|
| 54 |
import torch
|
| 55 |
import uuid
|
| 56 |
import shutil
|
| 57 |
+
from huggingface_hub import snapshot_download
|
| 58 |
+
from PIL import Image
|
| 59 |
+
from accelerate.utils import set_seed
|
| 60 |
+
|
| 61 |
+
# 从这里往下,粘贴你原本所有的业务逻辑代码 (PartCrafterPipeline 等)
|
| 62 |
+
# ...
|
| 63 |
|
| 64 |
# --- 🚀 核心修复:强制版本回退以避开编译 ---
|
| 65 |
def pre_install_check():
|