Spaces:
Sleeping
Sleeping
File size: 2,819 Bytes
866d61a f8cf542 b5df2c7 0acb792 b5df2c7 3a0c218 f8cf542 3a0c218 f8cf542 b5df2c7 3a0c218 b5df2c7 3a0c218 b5df2c7 3a0c218 b5df2c7 3a0c218 f8cf542 b5df2c7 f8cf542 b5df2c7 f8cf542 3337e6d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 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"] |