wayland support in wheels on Pypi
Sergio Callegari
sergio.callegari at gmail.com
Fri Feb 21 11:23:01 GMT 2025
Tested the new wheel.
Now the application (spyder) starts in wayland mode! There is still a
complaint about missing wayland-egl:
Failed to load client buffer integration: "wayland-egl"
Available client buffer integrations: ("xcomposite-glx")
Might be something related to
plugins/platforms/libqwayland-egl.so
plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so
that apparently are missing, while present in other python applications
with bundled Qt5 that I have (e.g. qcad).
Hope this feedback is useful,
best regards,
Sergio
On 21/02/2025 11:27, Phil Thompson wrote:
> Apologies for not being able to reply earlier. An updated PyQt5-Qt5
> wheel (build number 1) has been uploaded to the local PyPI server. If it
> fixes the problem then I'll move it to pypi.org.
>
> Answers to your questions are embedded below.
>
> Phil
>
> On 21/02/2025 08:42, Sergio Callegari wrote:
>> I have digged a little further.
>>
>> On 19/02/2025 23:33, Sergio Callegari wrote:
>>> Debugging as suggesting reveals that, as suspected, |pyqt5-qt5| does
>>> not contain the wayland plugin, that is not in the wheel for this
>>> package.
>>
>> It is my understanding that the wheels for pyqt5-qt5 on pypi are built
>> using the PyQt-bundle tool, part of PyQt-builder. Can this be
>> confirmed?
>
> No. pyqt-bundle is used to embed your copy of Qt in your copy of the
> PyQt5 wheels so that the PyQt5-Qt5 wheels on pypi.org are no longer
> used. It is mainly used by commercial customers to create a single
> commercial wheel (using their commercial copy of Qt) that they can
> easily distribute to their developers.
>
> The PyQt5-Qt5 wheels are created with pyqt-qt-wheel which is also part
> of PyQt-builder but is undocumented.
>
>> I also understand that PyQt-builder is available from Pypi, so one can
>> install it and so get the pyqt-bundle command line tool. Is this
>> correct?
>
> Yes.
>
>> Once one has this, it should be possible to run pyqt-bundle against
>> your system QT library directory, and the pyqt-bundle should be able
>> to pick the relevant part and make a wheel of it. If I get it right,
>> this should be the way in which the PyQt5-Qt5 wheels present on Pypi
>> are built by Phil Thompson, who is also the maintainer of the
>> pyqt-builder framework. Right?
>
> Yes.
>
>> Now, assuming that the above points are right (my apology if they are
>> not), there are still a few missing points for me.
>>
>> 1) Why does the "official" pyqt5-qt5 wheel from pypi miss the qt
>> wayland plugin? is the bundle tool explicitly excluding it or is the
>> wheel built from a QT distribution without it? In the latter case,
>> would it be possible to update the wheel to also include the wayland
>> plugin?
>
> Normally the Qt wheels are created from an installation that itself was
> created by the Qt online installer. This is because Qt is a pain to
> build from source (specifically to get all the dependencies right).
> However newer releases of Qt v5.15 no longer included in the online
> installer and only available as source packages. I was happy to stick
> with the last version that was included (v5.15.2) but then I wanted to
> support PyQt5 on Apple silicon (my development platform). This meant
> using a later version of v5.15 and having to build from source. Later on
> I chose to build from source for Linux as well. I still plan to do the
> same for Windows but haven't got round to it yet.
>
> My Linux build of Qt missed the Wayland support which I have now
> (hopefully) fixed.
>
>> 2) Alternatively, do python packages have something like the
>> 'provides' concept that most linux distro packaging systems have? In
>> other words, would it be possible to have on pypi a pyqt5-qt-wayland
>> package that provides pyqt5-qt also including the wayland plugin?
>
> Yes. pyqt5-qt-wayland would contain just the missing plugins and have a
> dependency on the original pyqt5-qt5 wheel.
>
>> 3) Alternatively, can I use the pyqt-bundle cli tool to build my own
>> pyqt5-qt5 wheel based on my system's qt5 that includes the wayland
>> plugin and use that to satisfy the dependencies of other packages?
>
> Yes. You'd have to take steps to ensure your version was used in
> preference to the pypi.org version.
>
>> 4) And finally: would it be possible to create a 'fake' pyqt5-qt5
>> package to be used only locally merely pointing at the system qt5
>> installation, without duplicating it?
>
> The only way to use the system Qt5 (rather than a copy of it) would be
> to use sip-install/sip-wheel to build PyQt5 from source. That is what
> the Linux distros do to create their distro-specific build of PyQt.
>
>> Thanks,
>> Sergio
>>
>>
>>> Trying to point to my system QT5 plugins does not work either. They
>>> are recognized but they are not binary compatible, there must be some
>>> difference in the toolchain.
>>>
>>> The pyqt5-qt5 package is said to contain the subset of a Qt
>>> installation that is required by PyQt5. As of today that should
>>> probably include also the wayland plugin, or there should be another
>>> package on pypi providing it.
>>>
>>> Any clue?
>>>
>>> Sergio
>>>
>>> On 17/02/2025 09:32, Charles wrote:
>>>
>>>> Just set QT_DEBUG_PLUGINS [1], check where it tries to load the
>>>> plugins, and if it is a wrong path, fix it using the methods in [2].
>>>>
>>>> As a python application it isn't always clear where the application
>>>> path is which is used to load the plugins.
>>>>
>>>> [1] https://doc.qt.io/qt-6/debug.html#environment-variables-
>>>> recognized-by-qt
>>>> [2] https://doc.qt.io/qt-6/deployment-plugins.html
>>>>
>>>> On Mon, Feb 17, 2025 at 3:07 PM Sergio Callegari
>>>> <sergio.callegari at gmail.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I have noticed a strange behavior from applications using PyQt5
>>>> and PyQt5-Qt5 (seen using the python IDE spyder).
>>>>
>>>> When I run spyder after having installed it from the packages
>>>> provided by my distribution (manjaro), spyder runs as a wayland
>>>> application on my system.
>>>>
>>>> However, if I install spyder using pip, uv, or pipx (namely
>>>> installation methods that rely on pre-built wheels from pypi),
>>>> then spyder cannot run anymore as a wayland application. From its
>>>> logs, I see that it cannot find the appropriate Qt plugin:
>>>>
>>>> Could not find the Qt platform plugin “wayland” in “”
>>>>
>>>> Now I wonder if there might be something missing in the pre-built
>>>> wheels of PyQt5 distributed on Pypi.
>>>>
>>>> Being able to have Qt applications working as wayland applications
>>>> could be beneficial on systems with two displays with different
>>>> resolutions, which is a setup not well supported by some
>>>> compositors with Xwayland.
>>>>
>>>> Thanks for the attention and your help,
>>>>
>>>> Sergio
>>>>
>>>>
>>>>
>>>
More information about the PyQt
mailing list