# 1. 使用 NVIDIA 官方提供的 CUDA 12.1 + Python 3.10 基礎鏡像 FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 # 設定環境變數,防止互動式安裝卡住 ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV PATH="/home/user/.local/bin:${PATH}" # 🌟【最核心關鍵行】 # 強行把 user 的本地私有套件庫路徑註冊進 Linux 全域變數, # 這樣 app.py 在開機後動態 pip install 的 smplx、pytorch-lightning,子程序開新視窗時才讀得到! ENV PYTHONPATH="/home/user/.local/lib/python3.10/site-packages:${PYTHONPATH}" # 2. 安裝系統等級依賴 (FFmpeg, wget, Mesa 3D 庫) RUN apt-get update && apt-get install -y \ python3.10 python3-pip python3.10-venv \ ffmpeg git wget xz-utils \ libgl1-mesa-glx libglib2.0-0 libosmesa6-dev libegl1-mesa-dev freeglut3-dev \ && rm -rf /var/lib/apt/lists/* # 建立 python 指向 python3.10 的軟連結 RUN ln -s /usr/bin/python3.10 /usr/bin/python # 3. 建立標準 user 使用者 (Hugging Face Spaces 安全規範) RUN useradd -m -u 1000 user USER user ENV HOME=/home/user WORKDIR $HOME/app # 4. 🌟【如你所願:僅把下載 Blender 留在這裡】在 Build 階段下載並配置 Linux 版 Blender 3.6.0 RUN wget https://download.blender.org/release/Blender3.6/blender-3.6.0-linux-x64.tar.xz \ && tar -xf blender-3.6.0-linux-x64.tar.xz \ && rm blender-3.6.0-linux-x64.tar.xz \ && mv blender-3.6.0-linux-x64 blender # 5. 先複製依賴清單進貨櫃安裝 COPY --chown=user:user requirements.txt $HOME/app/ # 6. 安裝 Python 基本與前處理輕量依賴 RUN pip3 install --no-cache-dir --upgrade pip && \ pip3 install --no-cache-dir -r requirements.txt # 7. 將剩餘的所有文字程式碼、configs 複製進貨櫃 COPY --chown=user:user . $HOME/app # 8. 曝露 Gradio 預設端口 EXPOSE 7860 # 9. 啟動指令:直接呼叫最外層的 app.py CMD ["python3", "app.py"]