You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中使用CBC求解器运行Pyomo时出现numpy属性错误

问题解决:AttributeError: 'numpy.float64' object has no attribute 'polynomial_degree'

这个错误和CBC求解器路径无关,本质是Pyomo与Numpy版本不兼容导致的。Numpy 1.24.x移除了numpy.float64对象的polynomial_degree属性,而Pyomo 6.6.1的部分代码仍依赖该属性,因此触发报错。

解决方案

1. 调整Numpy版本

修改requirements.txt,将Numpy降级到Pyomo 6.6.1兼容的版本:

numpy==1.23.5
pandas==2.0.2
pyomo==6.6.1
streamlit==1.23.1
streamlit-aggrid==0.3.4.post3

2. 简化Dockerfile(可选但推荐)

你当前用Brew安装CBC属于冗余操作,Debian/Ubuntu系统可直接通过apt安装CBC,既避免路径配置问题,又减少镜像体积:

FROM python:3.9-slim

WORKDIR /app

COPY . .

ENV DEBIAN_FRONTEND=noninteractive

# 直接通过apt安装CBC和其他依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    gcc \
    libglpk-dev \
    glpk-utils \
    coinor-cbc \  # 新增:直接安装CBC求解器
    curl \
    git \
    software-properties-common \
    && rm -rf /var/lib/apt/lists/*

# 创建虚拟环境并安装依赖
RUN python3 -m venv venv \
    && . venv/bin/activate \
    && python3 -m pip install --upgrade pip \
    && pip3 install -r requirements.txt

# 配置环境变量,确保虚拟环境和求解器在PATH中
ENV PATH="/app/venv/bin:/usr/bin:$PATH"

EXPOSE 8501

HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health

ENTRYPOINT ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]

3. 验证修改

重新构建镜像并运行容器:

docker build -t pyomo-app .
docker run -p 8501:8501 pyomo-app

如果需要确认CBC是否可用,可以在Python代码中添加以下验证:

from pyomo.environ import SolverFactory
solver = SolverFactory('cbc')
print(f"CBC solver available: {solver.available()}")

内容的提问来源于stack exchange,提问作者Ahmed Akhtar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:57:43