पाइएस्ट-क्यूटी का उपयोग करते समय एक घातक पायथन त्रुटि क्यों?

Nov 22 2020

Pytest-qt का उपयोग कर मेरा पहला परीक्षण एक फेटल पायथन त्रुटि के साथ तुरंत विफल हो गया। मैंने इसे कोड कम कर दिया (एक ऐसा परीक्षण जो कभी नहीं होगा, लेकिन दुर्घटना नहीं होनी चाहिए):

from PyQt5 import QtCore as qtc


class sut(qtc.QObject):
    sig_sig_sputnik = qtc.pyqtSignal()

    def __init__(self):
        super().__init__()

    def listen(self):
        pass


def test_emit(qtbot):
    uut = sut()
    with qtbot.waitSignal(sut.sig_sig_sputnik, raising=True):
        uut.listen()

इसके साथ असफल होना:

=== test session starts ====
platform linux -- Python 3.6.9, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
PyQt5 5.10.1 -- Qt runtime 5.12.9 -- Qt compiled 5.9.5
rootdir: [~]/src/npsw/frameworks/rtx, inifile: pytest.ini
plugins: qt-3.3.0, metadata-1.10.0, html-2.1.1, jnj-radish-1.4.0
collected 1 item                                                                                                                                                             

test_min.py Fatal Python error: Aborted

Current thread 0x00007f7c8411c740 (most recent call first):
  File "[~]/.local/lib/python3.6/site-packages/pytestqt/plugin.py", line 57 in qapp
  File "[~]/.local/lib/python3.6/site-packages/_pytest/fixtures.py", line 792 in call_fixture_func
  File "[~]/.local/lib/python3.6/site-packages/_pytest/fixtures.py", line 964 in pytest_fixture_setup
[boilerplate pytest stack from here on down]

ध्यान दें कि विफलता qappस्थिरता में होती है , लेकिन परीक्षण उपयोग कर रहा है qtbot(जो qappस्वयं का उपयोग करता है)।

मुझे लगता है कि PyQt5, Qt रनटाइम और Qt संकलित (आउटपुट की दूसरी पंक्ति में) के लिए दिखाए गए संस्करणों में एक बेमेल है। मेरे 18.04 उबंटू सिस्टम में Qt5.9 है, जैसा कि सिस्टमवाइड Qt (मानक बायोनिक PPA से) है, लेकिन विकास समूह 5.12 का उपयोग कर रहा है। 5.12 रनटाइम एक विशेष स्थान पर स्थापित हैं, और इस रन के लिए, LD_LIBRARY_PATHउस स्थान को इंगित करता है। अगर मैं इस सेटिंग का उपयोग नहीं करता हूं, तो एक अलग त्रुटि तब होती है, जब पाइटेस्ट भी चलना शुरू कर देता है:

INTERNALERROR> ImportError: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5: symbol _ZNK15QDateTimeParser5parseER7QStringRiRK9QDateTimeb version Qt_5_PRIVATE_API not defined in file libQt5Core.so.5 with link time reference

जवाब

MikeC Nov 24 2020 at 22:33

अप्रत्याशित रूप से, Qt5.12 पुस्तकालयों के साथ एक कॉन्फ़िगरेशन समस्या है जिसे बस एक फ़ोल्डर में कॉपी किया जा रहा है। मैं निम्नानुसार एक वर्कअराउंड तैयार करने में सक्षम था:

sudo mkdir /usr/bin/platforms
sudo ln -s /our/local/libqxcb.so /usr/bin/platforms/libqxcb.so

इस दुर्घटना के बिना मेरे परीक्षण चलाने के लिए यह मेरे लिए पर्याप्त था।

पाइएस्ट-क्यूटी साइट पर फ्लोरियन ने मुझे सलाह दी, यह पायथन:

from PyQt5.QtWidgets import QApplication
app = QApplication([])

भी विफल रहता है, लेकिन ज्यादा जानकारी के बिना। फिर मुझे एक टिप मिली

export QT_DEBUG_PLUGINS=1

और अतिरिक्त नैदानिक ​​जानकारी ने मुझे उस platformsफ़ोल्डर में बताया ।