最新macOS下PyVirtualDisplay调用Xvfb报FileNotFoundError问题
问题根因
报错直接原因是GitHub Actions运行环境里找不到Xvfb(X虚拟帧缓冲)程序。
你在本地macOS上用brew装的XQuartz、gdal这些依赖只在你自己电脑上生效,GitHub Actions的CI环境是每次跑任务时全新初始化的独立虚拟机,不会同步你本地装的任何软件;而且PyVirtualDisplay只是个Python层的封装工具,不会自动帮你装底层依赖的Xvfb系统服务,调用时找不到对应二进制文件就直接抛文件不存在的错误。
正确配置步骤
优先选Ubuntu类型的GitHub Actions runner跑Mayavi的无头渲染任务,兼容性和稳定性比macOS runner好很多,配置如下:
- 在工作流文件里,跑Python测试的步骤之前,加一步安装系统依赖:
- name: 安装无头渲染相关系统依赖 run: | sudo apt update sudo apt install -y xvfb x11-utils libgdal-dev
这几个包分别对应你本地装的Xvfb、xdpyinfo、gdal组件,是适配Ubuntu环境的正确包名。
- 跑测试的时候,如果你代码里已经写了
Display(visible=0, size=(1280, 1024))的初始化逻辑,装完依赖直接跑测试命令就行;如果不想改业务代码,也可以在执行测试前手动启动Xvfb并配置好显示环境变量:
Xvfb :99 -screen 0 1280x1024x24 & export DISPLAY=:99 python3 -m pytest test_animate.py
*注意:如果你必须使用macOS runner运行任务,需要在CI步骤中单独安装XQuartz并启动X11服务,对应命令如下:
brew install gdal brew install --cask xquartz sudo launchctl load -w /Library/LaunchDaemons/org.macosforge.xquartz.privileged_startx.plist
该方案经常出现权限、服务启动失败的问题,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者WaterFox
相关产品推荐
相关产品推荐

