Не удается создать (python) приложение QApplication в действии github - PullRequest
1 голос
/ 15 марта 2020

У меня есть несколько модульных тестов для моего (python) Qt gui, которые требуют наличия экземпляра QApplication, но создание его всегда приводит к ошибке (то есть заканчивается сбросом ядра и прекращением работы приложения в строке с QApplication()) , До сих пор я пробовал:

  • методы создания:
    • обычный app = QApplication() на уровне модуля
    • app = QApplication(['--platform offscreen'])
    • с использованием прибор из pytest-qt, который управляет созданием объекта QApplication, т.е. передачей qtbot моим тестам
  • Я даже пробовал оба python порта qt, то есть:
    • PyQt5
    • PySide2
  • Виртуальные экраны:

Я пытался использовать https://github.com/nektos/act для локальной отладки этой проблемы, но при использовании этого подхода проблема не воспроизводилась (т.е. все работало, как ожидалось), пока я не ' мы добавили herbstluftwm, то есть единственное, чего мне удалось добиться, это то, что локально он также начал давать сбой.

Что еще я могу проверить? Вы видели, как QApplication успешно создан на действиях GitHub? КСТАТИ. Как сделать вывод Qt видимым в действиях github? (Я добавил env: QT_DEBUG_PLUGINS: 1 и все еще не вижу ошибок)

1 Ответ

1 голос
/ 15 марта 2020

Благодаря @ eyllanes c запросу на MRE я создал этот https://github.com/konserw/mre минимальный пример репо, который позволил мне найти решение самостоятельно. Оказывается, что вам нужно установить xvfb и libxkbcommon-x11-0, но вы НЕ должны запускать xvfb service или herbstluftwm. Затем вам нужно запустить тестовую команду (coverage в моем случае), используя xvfb-run, что в случае действий github требует абсолютного пути к покрытию, например:

xvfb-run `which coverage` run -m pytest

Надеюсь, это поможет будущие пользователи действий github пытаются запустить тесты PyQt5 или PySide2 GUI.

Кстати. pytest отключал вывод из QT_DEBUG_PLUGINS Qt, поэтому замена тестовой команды простым вызовом python на какой-то минимальный скрипт, который воспроизводит проблему, была ключевой здесь. см https://github.com/konserw/mre/runs/509156615?check_suite_focus=true

...