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安装
修改原有操作步骤,执行以下命令:
- 启动Python镜像后,更新包列表并安装系统依赖:
apt-get update && apt-get install -y libgl1-mesa-glx libglib2.0-0 - 仅保留一种OpenCV安装方式(推荐PyPI包,适配PyInstaller):
pip install opencv-python pyinstaller - 重新执行打包命令:
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:
- 定位库文件路径:
find / -name libGL.so.1 - 打包时使用
--add-binary参数:
注意将路径替换为你实际找到的pyinstaller -F --add-binary "/usr/lib/x86_64-linux-gnu/libGL.so.1:." sample.pylibGL.so.1位置。
验证
运行生成的./dist/sample,应正常输出hello,不再出现libGL.so.1缺失错误。
内容的提问来源于stack exchange,提问作者gota
相关产品推荐
相关产品推荐

