简体   繁体   English

将 pyqt5 与 mayavi 和 pyvirtualdisplay 一起使用时,Unbutu 22.04 LTS 上的 Pytest 核心转储

[英]Pytest core dump on Unbutu 22.04 LTS when using pyqt5 with mayavi and pyvirtualdisplay

Want I want to do:想要我想做的事:

I want to have these requirements running on Ubuntu 22.04 LTS:我想在 Ubuntu 22.04 LTS 上运行这些要求:

# Bug on Ub.22.04 but avoids AttributeError: 'Timer' object has no attribute 'start' on other OS
pyqt5==5.15.7

# These together work:
mayavi==4.7.4
PyVirtualDisplay==3.0
pytest==7.1.2

So I can run this test:所以我可以运行这个测试:

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;

Problem问题

Adding the PyQt5 to the list of dependencies seems to break the behavior of the program on Ubuntu 22.04 LTS (although it works on Ubuntu 20.04 LTS and MacOS for multiple version of Python 3.将 PyQt5 添加到依赖项列表似乎会破坏程序在 Ubuntu 22.04 LTS 上的行为(尽管它适用于 Ubuntu 20.04 LTS 和 MacOS 上的多个 Python 3 版本。

The output error is the following:输出错误如下:

Run python3 -m pip install pytest
  python3 -m pip install pytest
  cd tests
  python3 -m pytest
  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
Defaulting to user installation because normal site-packages is not writeable
Collecting pytest
  Downloading pytest-7.1.2-py3-none-any.whl (297 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 297.0/297.0 KB 8.8 MB/s eta 0:00:00
Collecting pluggy<2.0,>=0.12
  Downloading pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Collecting iniconfig
  Downloading iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Requirement already satisfied: attrs>=19.2.0 in /usr/lib/python3/dist-packages (from pytest) (21.2.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from pytest) (21.3)
Collecting py>=1.8.2
  Downloading py-1.11.0-py2.py3-none-any.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.7/98.7 KB 23.2 MB/s eta 0:00:00
Collecting tomli>=1.0.0
  Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/lib/python3/dist-packages (from packaging->pytest) (2.4.7)
Installing collected packages: iniconfig, tomli, py, pluggy, pytest
Successfully installed iniconfig-1.1.1 pluggy-1.0.0 py-1.11.0 pytest-7.1.2 tomli-2.0.1
Fatal Python error: Aborted
Current thread 0x00007f99b32c8000 (most recent call first):
  File "/home/runner/.local/lib/python3.10/site-packages/pyface/ui/qt4/init.py", line 36 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "<frozen importlib._bootstrap>", line 1050 in _gcd_import
  File "/usr/lib/python3.10/importlib/__init__.py", line 126 in import_module
  File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171 in load
  File "/home/runner/.local/lib/python3.10/site-packages/pyface/base_toolkit.py", line 218 in import_toolkit
  File "/home/runner/.local/lib/python3.10/site-packages/pyface/base_toolkit.py", line 263 in find_toolkit
  File "/home/runner/.local/lib/python3.10/site-packages/pyface/toolkit.py", line 23 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/qt4/toolkit.py", line 33 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1078 in _handle_fromlist
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/qt4/__init__.py", line 35 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "<frozen importlib._bootstrap>", line 1050 in _gcd_import
  File "/usr/lib/python3.10/importlib/__init__.py", line 126 in import_module
  File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171 in load
  File "/home/runner/.local/lib/python3.10/site-packages/pyface/base_toolkit.py", line 282 in find_toolkit
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/toolkit.py", line 110 in toolkit
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/toolkit_traits.py", line 43 in ColorTrait
  File "/home/runner/.local/lib/python3.10/site-packages/traits/trait_factory.py", line 40 in __call__
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/editors/code_editor.py", line 32 in CodeEditor
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/editors/code_editor.py", line 21 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/editors/api.py", line 96 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/editors/__init__.py", line 16 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 992 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/traitsui/api.py", line 257 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/mayavi/preferences/preference_manager.py", line 29 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/mayavi/preferences/api.py", line 4 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/mayavi/tools/engine_manager.py", line 12 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/mayavi/tools/camera.py", line 24 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "/home/runner/.local/lib/python3.10/site-packages/mayavi/mlab.py", line 16 in <module>
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 883 in exec_module
  File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
  File "<frozen importlib._bootstrap>", line 241 in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1078 in _handle_fromlist
  File "/home/runner/work/pyvirtualdisplay-bug/pyvirtualdisplay-bug/tests/test_animate.py", line 8 in <module>
  File "/home/runner/.local/lib/python3.10/site-packages/_pytest/assertion/rewrite.py", line 168 in exec_module
  ...
Extension modules: numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg.lapack_lite, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, traits.ctraits, PyQt5.QtCore, PyQt5.QtGui, PyQt5.QtWidgets, PyQt5.QtPrintSupport, PyQt5.QtNetwork, PyQt5.QtQml, PyQt5.QtBluetooth, PyQt5.QtDBus, PyQt5.QtDesigner, PyQt5.QtHelp, PyQt5.QtNfc, PyQt5.QtOpenGL, PyQt5.QtPositioning, PyQt5.QtLocation, PyQt5.QtQuick, PyQt5.QtQuick3D, PyQt5.QtQuickWidgets, PyQt5.QtRemoteObjects, PyQt5.QtSensors, PyQt5.QtSerialPort, PyQt5.QtSql, PyQt5.QtSvg, PyQt5.QtTest, PyQt5.QtTextToSpeech, PyQt5.QtWebChannel, PyQt5.QtWebSockets, PyQt5.QtX11Extras, PyQt5.QtXml, PyQt5.QtXmlPatterns (total: 44)
/home/runner/work/_temp/0585cdff-a041-431e-b28d-a33e621d22b2.sh: line 3:  6351 Aborted                 (core dumped) python3 -m pytest

Bug reproduction错误再现

I created a small repo to reproduce the issue.我创建了一个小仓库来重现这个问题。 I created a bunch of branches where I cut some python dependencies off until I could isolate pyqt5 as the one breaking the working state: the changes are documented in the README.我创建了一堆分支,在其中我切断了一些 python 依赖项,直到我可以将 pyqt5 隔离为破坏工作状态的分支:这些更改记录在自述文件中。 I know using external repos is not ideal, but since in that case it is a Github Action problem (it works on my local Ubuntu 22.04), maybe it makes sense?我知道使用外部存储库并不理想,但因为在这种情况下这是一个 Github Action 问题(它适用于我本地的 Ubuntu 22.04),也许它有意义?

So the problem is that the system dependencies of PyQt5 (the python wrapper for Qt) were not installed on Ubuntu 22.05.所以问题是 Ubuntu 22.05 上没有安装 PyQt5(Qt 的 python 包装器)的系统依赖项。

I initially tried to install the required system dependency qt5-default (that is, what worked for Ubuntu 20.04), but as stated here and here , the qt5-default package was removed in Ubuntu 21.04 and at the time I assumed (misinformed decision) that it was because the package was now shipped with the distribution.我最初尝试安装所需的系统依赖qt5-default (即,适用于 Ubuntu 20.04 的),但如herehere所述, qt5-default软件包已在 Ubuntu 21.04 中删除,当时我认为(错误的决定)那是因为该软件包现在随发行版一起提供。 Well, it's not ^^好吧,这不是^^

The way around is to install the qt5-default dependencies, with:解决方法是安装qt5-default依赖项,其中:

sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools

That was enough to make the project run on Ubuntu 22.04 LTS, and it was obviously my mistake, but I wonder what in the error message could have put me on the right track (missing system dependency) a bit sooner.这足以让项目在 Ubuntu 22.04 LTS 上运行,这显然是我的错误,但我想知道错误消息中的什么内容可能会让我早点走上正确的轨道(缺少系统依赖项)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM