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

Docker容器中PyInstaller打包含OpenCV的Python脚本运行报错求助

解决Docker中PyInstaller打包cv2时libGL.so.1缺失问题

问题根源

  • Python官方Docker镜像(基于Debian/Ubuntu)默认不包含OpenGL相关系统依赖库,libGL.so.1是OpenCV运行必需的系统级库。
  • 同时安装python3-opencv(系统包)和opencv-python(PyPI包)会引发依赖冲突,加重问题。

解决方案

方案1:补充系统依赖并规范OpenCV安装

修改原有操作步骤,执行以下命令:

  1. 启动Python镜像后,更新包列表并安装系统依赖:
    apt-get update && apt-get install -y libgl1-mesa-glx libglib2.0-0
    
  2. 仅保留一种OpenCV安装方式(推荐PyPI包,适配PyInstaller):
    pip install opencv-python pyinstaller
    
  3. 重新执行打包命令:
    pyinstaller -F sample.py
    

方案2:用Dockerfile标准化GitLab CI流程

为GitLab CI编写Dockerfile,确保流程稳定可复现:

FROM python:3.10-slim

# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1-mesa-glx \
    libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# 安装Python依赖
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制脚本并打包
COPY sample.py .
RUN pyinstaller -F sample.py

# 验证可执行文件(可选)
CMD ["./dist/sample"]

对应的requirements.txt内容:

opencv-python
pyinstaller

方案3:强制PyInstaller包含缺失库

若前两种方案无效,可显式指定PyInstaller添加libGL.so.1:

  1. 定位库文件路径:
    find / -name libGL.so.1
    
  2. 打包时使用--add-binary参数:
    pyinstaller -F --add-binary "/usr/lib/x86_64-linux-gnu/libGL.so.1:." sample.py
    
    注意将路径替换为你实际找到的libGL.so.1位置。

验证

运行生成的./dist/sample,应正常输出hello,不再出现libGL.so.1缺失错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:20:30