[PySide] How to create Qt lib bindings and publicate it to pip

icfwm at gmx.net icfwm at gmx.net
Sat May 2 15:39:22 CEST 2020


> Thank you for answering my question!
> Looks, like a dependency nightmare )

It's not that bad. It's just shiboken2 and PySide2 for your package plus
shiboken2_generator for generating the bindings. I wouldn't call this a
nightmare.

> Are there any shared build jobs for pyside2? I mean, the jobs like
> CirclCI, TravisCI, Github Actions, etc.
> This would make creation python packages based on pyside2 much easier.

I guess you already found the docker containers provided here
https://github.com/pypa/manylinux for generating binary python packages
for linux. Other than that I am not aware of more resources, I think
you'd have to integrate your library into a CI environment for your own.


>
> сб, 2 мая 2020 г. в 15:18, <icfwm at gmx.net <mailto:icfwm at gmx.net>>:
>
>     Hi,
>
>     you have to use shiboken2 for creating the bindings. In the
>     bindings xml description, use the options
>
>         <load-typesystem name="typesystem_core.xml" generate="no" />
>         <load-typesystem name="typesystem_core_common.xml"
>     generate="no" />
>
>     for being able to use QtCore (the xml files are part of PySide2).
>     You will need the shiboken2_generator package. I am using the
>     binary package provided at qt.io <http://qt.io>, even though this
>     is not really recommended.
>
>     From my understanding, PySide2 does not maintain binary
>     compatibility between minor versions (this is different to the C++
>     Qt library). This means that the bindings are valid only for a
>     specific PySide2 version (such as 5.14.2.1) and this specific
>     version should be set as a dependency in your setup.py. via 
>     install_requires=["PySide2==5.14.2.1", "shiboken2==5.14.2.1"].
>
>     If you want to provide binary packages for linux, you probably
>     want to go the manylinux2014 path (see the manylinux1 discussion a
>     few threads above). I have had troubles to get shiboken2_generator
>     run correctly on this platform, so my solution is to generate the
>     sources on a different linux system and compile them on the
>     manylinux2014 container.
>
>     You can use any binary compatible version of QT for developing the
>     library (e.g., 5.14.0). However, when you load your library in
>     python, you have to ensure that the correct QT library is loaded
>     beforehand. Therefore, before importing your bindings, you have to
>     make sure that PySide2.QtCore (and all other PySide2 modules) are
>     imported before the bindings of your lib.
>
>     You may want to have a look at my work-in-progress package for
>     reference: https://github.com/ifm/nexxT, relevant portions are
>     nexxT/src/cnexxT.xml and nexxT/__init__.py (where QtCore is
>     imported before actually importing the bindings cnexxT).
>
>     Hope this helps
>     Christoph
>
>     On 26.04.20 22:31, Михаил Миловидов wrote:
>>     Hello,
>>
>>     I have open source project
>>https://marketplace.qt.io/collections/featured/products/daggy
>>     I want to create python bindings for my lib such as separate
>>     python package and publicate it in pip.
>>     The lib
>>https://github.com/synacker/daggy/tree/master/src/DaggyCore) -
>>     that I want to publicate based on Qt framework and has
>>     signals/slots interface.
>>     It means, that lib must be binary compatable with pyside2 python
>>     package, for using signals and slots.
>>     I think, that this lib can give boost for using Qt in python in
>>     non-gui cases, because it gives solution that not exists on python:
>>     https://stackoverflow.com/questions/18322123/receiving-streaming-output-from-ssh-connection-in-python
>>     https://stackoverflow.com/questions/57066148/streaming-python-command-executed-over-ssh-in-real-time
>>     https://stackoverflow.com/questions/7680055/python-to-emulate-remote-tail-f
>>     https://stackoverflow.com/questions/18421757/live-output-from-subprocess-command
>>     https://stackoverflow.com/questions/50612710/read-streaming-data-over-pipe-in-python
>>
>>     There are no direct ways for local or remote data streaming and
>>     aggregation, but my lib will offer to do this in simple way with
>>     Qt signals/slot async model.
>>     Therefore, I'm very motivated in python bindings, but still not
>>     understand, how to ensure binary compatibility with pyside2
>>     python package.
>>
>>     Is there any tutorials, examples or may be docker containers for
>>     building Qt lib python bindings with the same envoronment, such
>>     as pyside2 in pip?
>>     At this time, I understand, how to compile my Qt lib python
>>     bindings compatable with pyside2 only for local compilation from
>>     source, but don't understand how to ensure compatibility with
>>     pyside2 from pip.
>>
>>     Thank you for attention!
>>
>>     _______________________________________________
>>     PySide mailing list
>>     PySide at qt-project.org <mailto:PySide at qt-project.org>
>>     https://lists.qt-project.org/listinfo/pyside
>
>
>     _______________________________________________
>     PySide mailing list
>     PySide at qt-project.org <mailto:PySide at qt-project.org>
>     https://lists.qt-project.org/listinfo/pyside
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20200502/bfdb73b0/attachment-0001.html>


More information about the PySide mailing list