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"]