[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] A Heads Up for PyQt Packagers
From:       Phil Thompson <phil () riverbankcomputing ! com>
Date:       2018-06-25 12:28:59
Message-ID: EC24C2F6-E325-4780-9EB5-DEDE3A3EC221 () riverbankcomputing ! com
[Download RAW message or body]

On 25 Jun 2018, at 12:42 pm, Hans-Peter Jansen <hpj@urpla.net> wrote:
> 
> Dear Phil,
> 
> On Sonntag, 17. Juni 2018 22:27:54 Phil Thompson wrote:
> > This will mainly be of interest to people who create sip, PyQt4, PyQt5 etc.
> > packages for Linux but also anybody who builds from source.
> > 
> > Starting with v5.11 (ie. the next release) PyQt5 will use a private copy of
> > the sip module. Packagers have the choice of including it with PyQt5 or
> > creating a new package (PyQt5_sip?). The wheels will use the second
> > approach (because the module is Python version specific, whereas the PyQt5
> > modules themselves are not).
> > 
> > There will be one last release of PyQt4 which will also use a private copy
> > of the sip module.
> > 
> > As a matter of interest, wxPython also uses a private copy of the sip
> > module.
> > 
> > The change fixes a 20 year old design mistake and makes it much easier to
> > move on with SIP v5 without worrying about the baggage of PyQt4.
> 
> While this might ease further sip development, it will create headaches for 
> sip users for what I can imagine, since this will lead to a sip version 
> inflation over time on certain systems.
> 
> Attending sip and pyqt development for about 20 years now, I can see, that  
> external backflow to sip development is pretty low unfortunately. On the other 
> hand, it has *always* been a pleasure to package your stuff and to work with.

> From a packager POV, ending with sip4_qt4, sip4_qt5, sip4_kde4, sip4_kde5, 
> sip4_mypackage isn't exactly funny. Adding sip5 to the mix will further add 
> jags to the picture. 
> 
> If a developer want to use the sip technology, first step would be choosing 
> the relevant sip version, clone it, and stick with it. Further improvements to 
> sip will most probably pass by since there's no pressure to get it right for 
> all sip users.
> 
> Given the scale of the generated bindings, I fear, that issues may pass 
> unnoticed with the new model much longer than now. This problem could be 
> combated with automatic generation of (python) test code, but this is a 
> mammoth project, that isn't going to be realized with the available manpower 
> any time soon. With the KDE bindings in mind, I bet, that there are a lot of 
> code paths, that were never exercised, nowhere. With my personal rule of thump 
> "code paths, that aren't exercised, are broken", this leaves behind an 
> uncomfortable feeling in this regard.
> 
> Hence, I'm not sure, if sip diversity will pay off in the end.
> 
> Please don't get me wrong, but branching and unitizing might be viable 
> solutions to the problem, that also reduce code diversity.

Whether or not you create new packages for the private copy of the sip module is \
entirely down to you as a packager. If it were me I would do it so that the number \
and names of the packages would be exactly the same as they are today. Only the \
dependencies between them would change. Specifically I would include the private copy \
of the sip module in my PyQt4 and PyQt5 packages. The dependency of your PyQt4/PyQt5 \
packages on your SIP package would be removed. Whether the private copy was created \
by SIP4 or SIP5 is irrelevant. Any kde4 or kde5 would not include a private copy of \
the sip module - they would automatically use PyQt's copy.

When it comes to wheels I take a different approach and package the private copy of \
the sip module separately, ie. it has its own wheel. The reason for this is that the \
sip module is dependent on a specific version of Python (3.5, 3.6, 3.7 etc) but \
presents a version-independent API to PyQt etc. Therefore to add support for (say) \
Python v3.8 I just need to release a new sip module wheel for that version and the \
existing PyQt wheels will automatically work.

I think one cause of confusion is my use of the word "private". PyQt and PyQt3D and \
QScintilla etc, etc form a hierachy of modules rooted at the QtCore module. All of \
those modules share the same "private" copy of the sip module. It is perfectly \
reasonable for me (as the author of PyQt) to place restrictions on the version of the \
sip module shared by all those modules (including any written by other people). \
However it's not reasonable for those restrictions to be forced onto authors of other \
modules that have nothing to do with PyQt.

Phil
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic