构建Python Docker镜像时Pandas编译Wheel耗时过长问题求助
解决Python Docker镜像构建时Pandas编译耗时过长的问题
问题现象
构建Python Docker镜像时,执行pip install步骤耗时超20分钟,持续重复输出如下内容:
Building wheel for pandas (pyproject.toml): still running...
相关文件内容
Dockerfile
FROM python:3.11.2-buster WORKDIR /app COPY . . RUN pip install -r /app/requirements.txt CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--port=80"]
requirements.txt
fastapi uvicorn pydantic[dotenv] requests python-dotenv==0.19.2 pandas==1.4.3 numpy==1.24.2 scikit-learn==1.2.2
核心原因
pandas 1.4.3不支持Python 3.11,pip无法找到对应版本的预编译二进制包,只能从源码编译pandas,这一过程需要大量编译时间。
解决方案
方案1:升级pandas到支持Python 3.11的版本
修改requirements.txt中的pandas版本为支持Python 3.11的版本(如1.5.3及以上):
pandas>=1.5.3
同时升级pip确保能获取最新预编译包,修改Dockerfile的RUN步骤:
RUN pip install --upgrade pip && pip install -r /app/requirements.txt
方案2:降级Python版本匹配pandas 1.4.3
将Dockerfile的基础镜像改为支持pandas 1.4.3的Python版本(如3.10):
FROM python:3.10-buster WORKDIR /app COPY . . RUN pip install --upgrade pip && pip install -r /app/requirements.txt CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--port=80"]
方案3:强制使用预编译二进制包(辅助优化)
在安装依赖时添加--only-binary :all:参数,强制pip使用预编译包(需配合前两个方案确保版本兼容):
RUN pip install --upgrade pip && pip install --only-binary :all: -r /app/requirements.txt
方案4:使用轻量化基础镜像(可选)
若需缩小镜像体积,可使用slim版本基础镜像,但需提前安装pandas依赖的系统库:
FROM python:3.11.2-slim-buster WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ libgomp1 \ && rm -rf /var/lib/apt/lists/* COPY . . RUN pip install --upgrade pip && pip install --only-binary :all: -r /app/requirements.txt CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--port=80"]
内容的提问来源于stack exchange,提问作者wahyu eko hadi saputro
相关产品推荐
相关产品推荐

