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

Linux(AWS Elastic Beanstalk)环境下PyQt5报ImportError: libGL.so.1错误

解决AWS Elastic Beanstalk部署PyQt5/QWebEnginePage时的libGL.so.1缺失问题

嘿,我之前部署依赖PyQt5的项目到EB时也踩过这个坑,给你拆解下问题和解决办法:

为啥会出这问题?

你本地Windows跑没问题,是因为Windows版的PyQt5已经把OpenGL这类底层依赖打包进去了,但AWS Elastic Beanstalk用的Linux环境(不管是Amazon Linux还是AL2)默认没装libGL.so.1这个OpenGL系统库,而QWebEnginePage刚好要靠它才能运行,所以部署后就报找不到文件的错了。

几个可行的解决办法

办法1:用.ebextensions自动装系统依赖

这是最直接的方案,让EB在部署的时候帮你把缺失的库装上:

  • 在项目根目录新建一个.ebextensions文件夹(没有的话就建)
  • 里面新建个packages.config文件,内容写:
packages:
  yum:
    mesa-libGL: []
    mesa-libGL-devel: []
  • 把这个文件夹和代码一起打包,重新跑eb deploy就行

办法2:换个不需要PyQt5的无头渲染方案

如果你的爬虫只是需要渲染JS页面,没必要死磕PyQt5的话,可以换纯Python的无头工具,比如:

  • requests-html:基于requests和pyppeteer,不用额外装系统库,一行r.html.render()就能渲染JS
  • playwright:虽然要装驱动,但部署时用playwright install就能搞定,也不会碰libGL的问题

举个requests-html的简单例子:

from requests_html import HTMLSession

session = HTMLSession()
page = session.get("你的目标网址")
page.html.render()  # 渲染动态内容
# 接下来就可以提取页面元素了

办法3:针对Amazon Linux 2的钩子脚本(如果用的是AL2环境)

要是你的EB环境是Amazon Linux 2,也可以用平台钩子来装依赖:

  • 新建.platform/hooks/predeploy文件夹
  • 里面放个叫install_deps.sh的脚本,内容:
#!/bin/bash
sudo yum install -y mesa-libGL mesa-libGL-devel
  • 别忘了给脚本加执行权限:chmod +x .platform/hooks/predeploy/install_deps.sh
  • 打包部署就ok了

验证下是否搞定

部署完可以用eb ssh登到EC2实例里,跑ldconfig -p | grep libGL看看有没有输出,要是能查到libGL的路径,就说明库装好了,再启动应用应该就没问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:30