[PyQt] Bug in PyQt5.Qt

Kovid Goyal kovid at kovidgoyal.net
Sun Jun 15 11:18:18 BST 2014


Thanks :)

Kovid.

On Sun, Jun 15, 2014 at 11:04:01AM +0100, Phil Thompson wrote:
> Fixed in tonight's SIP snapshot. I think the root cause is a Python v2 bug.
> 
> Phil
> 
> On 13/06/2014 6:08 pm, Kovid Goyal wrote:
> >I confirmed it, the following implementation fixes the bug:
> >
> >static void sip_import_component_module(PyObject *d, const char *name)
> >{
> >#if PY_VERSION_HEX >= 0x02050000
> >    PyObject *mod = PyImport_ImportModule(name);
> >#else
> >    PyObject *mod = PyImport_ImportModule((char *)name);
> >#endif
> >
> >    /*
> >     * Note that we don't complain if the module can't be imported.  This
> >     * is a favour to Linux distro packagers who like to split PyQt into
> >     * different sub-packages.
> >     */
> >    if (mod)
> >    {
> >        PyDict_Merge(d, PyModule_GetDict(mod), 0);
> >        Py_DECREF(mod);
> >    } else PyErr_Clear();  // Without this subsequent
> >PyImport_Importmodule calls fail
> >}
> >
> >Kovid.
> >
> >On Fri, Jun 13, 2014 at 10:12:15PM +0530, Kovid Goyal wrote:
> >>Hi Phil,
> >>
> >>Reading the source code of the PyQt5.Qt module, it is supposed to work
> >>even if some of the PyQt modules are missing. It does not. For example,
> >>remove the QtMultimedia.so module and run
> >>
> >>python -c "from PyQt5.Qt import QStyle"
> >>
> >>This raises an import error. But
> >>
> >>python -c "import PyQt5.QtWidgets; from PyQt5.Qt import QStyle"
> >>
> >>works.
> >>
> >>My best guess is that PyImport_ImportModule requires PyErr_Clear()
> >>between invocations. (I am away from my dev machine and cant test it
> >>right now).
> >>
> >>I'd appreciate if this could be fixed as it breaks calibre on linux
> >>distros where PyQt is only partially installed. I am working around it
> >>for the moment by importing PyQt5.QtWebKitIwdgets very early in calibre
> >>initialization, but this is less than optimal for obvious reasons.
> >>
> >>I could implement a more robust solution by implementing a meta import
> >>hook, but I'd rather not spend the time on that if it can be fixed
> >>simply in PyQt5.
> >>
> >>Thanks,
> >>
> >>Kovid.
> >>
> >>--
> >>_____________________________________
> >>
> >>Dr. Kovid Goyal
> >>http://www.kovidgoyal.net
> >>http://calibre-ebook.com
> >>_____________________________________
> >
> >
> >
> >>_______________________________________________
> >>PyQt mailing list    PyQt at riverbankcomputing.com
> >>http://www.riverbankcomputing.com/mailman/listinfo/pyqt
> >
> >
> >_______________________________________________
> >PyQt mailing list    PyQt at riverbankcomputing.com
> >http://www.riverbankcomputing.com/mailman/listinfo/pyqt
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
> 
> !DSPAM:3,539d6fab16787315565600!
> 
> 

-- 
_____________________________________

Dr. Kovid Goyal 
http://www.kovidgoyal.net
http://calibre-ebook.com
_____________________________________
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20140615/21ed5906/attachment.sig>


More information about the PyQt mailing list