theYiran commited on
Commit
63a16cb
·
verified ·
1 Parent(s): 3d325b7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -29
app.py CHANGED
@@ -1,61 +1,65 @@
 
1
  import sys
2
- from types import ModuleType
 
 
 
3
 
4
- # --- 🧪 终极暴力:内存级伪造 diso ---
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
- # --- 正常的安装流程 (保留已成功的 scatter/sparse) ---
29
  def install_essential_packages():
30
- # scatter 等包你已经安装成功了,这里只做一次性快速确认
 
 
 
 
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
- subprocess.run([sys.executable, "-m", "pip", "install", "pyrender", "pyopengl==3.1.0", "pyyaml", "-q"])
 
 
38
 
39
  install_essential_packages()
40
 
41
- # --- 现在可以安全地 import 业务代码了 ---
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():