Spaces:
Sleeping
Sleeping
| FROM python:3.13 | |
| # 安装完整的构建依赖 | |
| RUN apt-get update && apt-get install -y \ | |
| git \ | |
| build-essential \ | |
| cmake \ | |
| g++ \ | |
| gcc \ | |
| libboost-all-dev \ | |
| libboost-python-dev \ | |
| python3-dev \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # 升级 pip 和构建工具 | |
| RUN python -m pip install --upgrade pip setuptools wheel | |
| # 安装编译依赖 | |
| RUN pip install --no-cache-dir Cython numpy scipy | |
| # 诊断:找到所有 boost_python 库 | |
| RUN echo "=== Detecting boost_python libraries ===" && \ | |
| find /usr/lib -name "*boost_python*.so*" 2>/dev/null | tee /tmp/boost_libs.txt && \ | |
| ldconfig -p | grep boost_python | tee -a /tmp/boost_libs.txt | |
| # 自动创建符号链接 | |
| RUN BOOST_LIB=$(find /usr/lib -name "libboost_python*.so" | head -1) && \ | |
| if [ -n "$BOOST_LIB" ]; then \ | |
| echo "Found boost library: $BOOST_LIB"; \ | |
| ln -sf "$BOOST_LIB" /usr/lib/x86_64-linux-gnu/libboost_python310.so; \ | |
| ln -sf "$BOOST_LIB" /usr/lib/x86_64-linux-gnu/libboost_python-py310.so; \ | |
| ln -sf "$BOOST_LIB" /usr/lib/x86_64-linux-gnu/libboost_python3.so; \ | |
| echo "Created symlinks"; \ | |
| fi | |
| # 验证链接 | |
| RUN ls -la /usr/lib/x86_64-linux-gnu/libboost_python* || echo "No boost_python libs found" | |
| # 创建用户 | |
| RUN useradd -m -u 1000 user | |
| WORKDIR /app | |
| # 复制代码 | |
| COPY --chown=user . /app | |
| # 编译 medpy(以 root 身份) | |
| USER root | |
| WORKDIR /app/medpy/source | |
| # 清理 | |
| RUN rm -rf build/ dist/ *.egg-info medpy/graphcut/*.so medpy/graphcut/*.cpp | |
| # 设置编译环境变量 | |
| ENV CFLAGS="-I/usr/include/python3.10" | |
| ENV LDFLAGS="-L/usr/lib/x86_64-linux-gnu" | |
| # 尝试编译,记录详细日志 | |
| RUN echo "=== Starting compilation ===" && \ | |
| python setup.py build_ext --inplace --force --verbose 2>&1 | tee /tmp/medpy_build.log; \ | |
| BUILD_STATUS=$?; \ | |
| echo "=== Build exit code: $BUILD_STATUS ===" && \ | |
| if [ $BUILD_STATUS -ne 0 ]; then \ | |
| echo "=== BUILD FAILED - Last 50 lines of log ===" && \ | |
| tail -50 /tmp/medpy_build.log && \ | |
| echo "=== Checking for .so files ===" && \ | |
| find . -name "*.so" && \ | |
| exit 1; \ | |
| fi | |
| # 验证编译 | |
| RUN echo "=== Verifying maxflow ===" && \ | |
| python -c "from medpy.graphcut.maxflow import GraphDouble; print('SUCCESS: maxflow loaded')" || \ | |
| (echo "FAILED to import maxflow" && cat /tmp/medpy_build.log && exit 1) | |
| # 安装 | |
| RUN pip install -e . | |
| # 切换回普通用户 | |
| USER user | |
| ENV PATH="/home/user/.local/bin:$PATH" | |
| WORKDIR /app | |
| # 安装其他依赖 | |
| COPY --chown=user ./requirements.txt requirements.txt | |
| RUN pip install --no-cache-dir --upgrade -r requirements.txt | |
| # 设置 Python 路径 | |
| ENV PYTHONPATH=/app/medpy/source:$PYTHONPATH | |
| # 端口与环境变量 | |
| EXPOSE 7860 | |
| ENV MCP_TRANSPORT=http | |
| ENV MCP_PORT=7860 | |
| # 启动命令 | |
| CMD ["python", "medpy/mcp_output/start_mcp.py"] |