Я пытаюсь использовать действия GitHub для тестирования моего приложения Kivy в различных операционных системах. Однако у меня возникли проблемы с запуском приложения в операционных системах MacOS, и я постоянно получаю эту ошибку:
INFO kivy:__init__.py:67 Window: Provider: sdl2
CRITICAL kivy:__init__.py:99 Window: Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
sdl2 - RuntimeError: b'Failed creating OpenGL pixel format'
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/kivy/core/__init__.py", line 71, in core_select_lib
cls = cls()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/kivy/core/window/window_sdl2.py", line 165, in __init__
super(WindowSDL, self).__init__()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/kivy/core/window/__init__.py", line 1129, in __init__
self.create_window()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/kivy/core/window/window_sdl2.py", line 316, in create_window
self.system_size = self._win.setup_window(
File "kivy/core/window/_window_sdl2.pyx", line 243, in kivy.core.window._window_sdl2._WindowSDL2Storage.setup_window
File "kivy/core/window/_window_sdl2.pyx", line 76, in kivy.core.window._window_sdl2._WindowSDL2Storage.die
Я могу заставить его работать на Windows и Linux. Бегун GitHub для MacOS не поддерживает OpenGL или есть способ решить эту проблему?
Мое тестовое приложение:
from kivy.uix.label import Label
from kivy.app import App
class SimpleApp(App):
def __init__(self, **kwargs):
super(SimpleApp, self).__init__(**kwargs)
self.text = "Hello World"
def build(self):
return Label(text=self.text)
if __name__ == '__main__':
SimpleApp().run()
Мой тестовый код:
import unittest
import time
from functools import partial
from kivy.clock import Clock
from simpleapp import SimpleApp
class Test(unittest.TestCase):
def pause(*args):
time.sleep(0.000001)
def run_test(self, app, *args):
self.assertEqual(app.text, "Hello World")
app.stop()
def test_example(self):
app = SimpleApp()
p = partial(self.run_test, app)
Clock.schedule_once(p, 0.000001)
app.run()
if __name__ == '__main__':
unittest.main()
И мой файл рабочего процесса:
name: Python application
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
permissions:
contents: read
jobs:
mac_test:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install kivy pytest
- name: Test App
run: |
python -m pytest






Это происходит потому, что kivy теперь использует серверную часть ANGLE для OpenGL в MacOS и больше не включает сборку OpenGL в kivy Wheels. На некоторых виртуальных машинах MacOS, например тех, которые используют исполнители GitHub Actions, необходимые API-интерфейсы Metal отсутствуют. Это приводит к невозможности найти поставщика окон при запуске приложения Kivy на MacOS с помощью общих средств запуска действий GitHub.
Один из способов обойти это — установить kivy из исходного кода (сказать pip не использовать двоичные колеса) и использовать программный провайдер OpenGL (один из таких провайдеров, который может использовать kivy, — pygame). Вы можете настроить шаг рабочего процесса GitHub Install dependencies следующим образом:
- name: Install dependencies
env:
USE_ANGLE_GL_BACKEND: "0"
run: |
python -m pip install --upgrade pip
python -m pip install pytest pygame
python -m pip install "kivy[base]" --no-binary kivy
Однако, хотя эта конфигурация работает (по крайней мере, в этом ограниченном примере), Kivy не поддерживает ее (поскольку она объявлена устаревшей Apple). Сейчас они официально поддерживают только бэкэнд Angle GL.
Можно виртуализировать MacOS с поддержкой Angle/Metal (во всяком случае, как это делают Parallels и VMware), но мне неясно, возможно ли это конкретно с виртуальными машинами GitHub Actions. В последний раз, когда мне удалось найти (февраль 2023 г.), сотрудник GitHub заявил, что это невозможно с их стратегией виртуализации MacOS, хотя детали неясны.
Связанный:
Другим вариантом обхода этого ограничения может быть использование автономного средства запуска MacOS с доступными возможностями Metal.