[External] Re: RuntimeError: the PyQt5.QtCore module failed to register with the sip module

Edward A. Pier epier at oceanit.com
Thu Jul 21 17:28:42 BST 2022


Thank you for your response. That makes sense that PyImport_ImportModule would call sip_api_export_module. That does not appear to be happening, though. When I add print statements to trace the code, I see PyImport_ImportModule getting called, then the code proceeds to the search for the module in moduleList without first seeing another entry into sip_api_export_module.

I wonder if the following could be happening...
PyQt5 on my system is precompiled, and then I am building my own code that references it. Because siplib.c is generated for each project, perhaps the QtCore import is calling a different sip_api_export_module and updating a different moduleList than the one implemented in my project?

If this is the explanation, is there a solution short of rebuilding PyQt5 as part of my project?

If it helps, I have attached my pyproject.toml file and the generated siblib.c source code.

I appreciate your help with this.

-ED




On 14/07/2022 14:04, Edward A. Pier wrote:
> I have C++ code that depends on Qt5 that I wrap into Python using sip.
> I am porting code that worked under Ubuntu 20.04 (sip 4.19.21, PyQt5
> 5.14.1) to run under Ubuntu 22.04 (sip 6.5.1, PyQt5 5.15.6). Now when
> I import the resulting Python module I get the error in the subject
> line:
>
> RuntimeError: the PyQt5.QtCore module failed to register with the sip
> module
>
> I traced this to the generated file siplib.c in the
> sip_api_export_module function. This function tries to load required
> modules, of which PyQt5.QtCore is the first. It calls
> PyImport_ImportModule and then tries to find the module in a linked
> list kept in the moduleList variable. The problem is that on the first
> call to sip_api_export_module, moduleList=NULL, i.e. the list is
> empty, as it only gets updated at the bottom of sip_api_export_module.
>
> So I'm a bit stumped how this could work, unless the first module for
> which sip_api_export_module is called does not have dependencies, or
> sip_api_export_module is called for those dependencies first. I've
> read through the pyproject.toml documentation, but I didn't see any
> way to make either of these things happen.

PyImport_ImportModule of QtCore will call QtCore's PyInit_QtCore
function which itself calls sip_api_export_module and adds QtCore to
moduleList.

It sounds like something called QtCore is being successfully imported
but it's not the QtCore extension module.

> Let me know what additional information might help get to the bottom of
> this.

The pyproject.toml file might help.

Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20220721/94ea5159/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pyproject.toml
Type: application/octet-stream
Size: 612 bytes
Desc: pyproject.toml
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20220721/94ea5159/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: siplib.c
Type: text/x-csrc
Size: 351162 bytes
Desc: siplib.c
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20220721/94ea5159/attachment-0001.c>


More information about the PyQt mailing list