Ubuntu 22.04下PyQt5+mayavi+PyVirtualDisplay运行Pytest coredump
部署需求
需要在Ubuntu 22.04 LTS环境中部署指定版本依赖,用于运行可视化相关测试用例,依赖版本要求如下:
# 该版本可规避其他系统下AttributeError: 'Timer' object has no attribute 'start'报错,但在Ubuntu22.04存在异常 pyqt5==5.15.7 # 以下依赖组合可正常协同工作 mayavi==4.7.4 PyVirtualDisplay==3.0 pytest==7.1.2
测试执行逻辑
测试执行流程为:先通过PyVirtualDisplay启动分辨率为1280*1024的无界面虚拟显示,再导入mayavi.mlab模块,执行基础断言逻辑,测试代码如下:
import pytest from pyvirtualdisplay import Display import os display = Display(visible=0, size=(1280, 1024)) display.start() from mayavi import mlab def foo(tmp_path): assert 0 == 0
故障现象
- 指定依赖组合在Ubuntu 20.04 LTS、多Python3版本的MacOS系统中均可正常运行
- 故障仅复现于GitHub Action CI的Ubuntu 22.04 LTS环境,本地安装的同版本Ubuntu 22.04系统运行无异常
- 引入PyQt5依赖后执行
python3 -m pytest命令会触发致命Python错误,进程异常中止并生成core dump - 错误调用栈显示异常触发于pyface加载Qt4工具包、traitsui初始化、逐层导入mayavi模块的流程中,进程中止前已加载numpy、traits、全量PyQt5相关扩展模块
问题定位
已搭建公开GitHub复现仓库,通过创建多个分支逐步裁剪依赖的方式,最终定位 PyQt5 为导致原本可正常运行的依赖组合失效的关联组件,仓库README中记录了完整的依赖调整验证过程。
内容的提问来源于stack exchange,提问作者WaterFox
相关产品推荐
相关产品推荐

