[PyQt] Private sip modules conflict with public sip module

Phil Thompson phil at riverbankcomputing.com
Sun Aug 18 17:31:59 BST 2019


On 18/08/2019 16:52, Scott Talbert wrote:
> On August 18, 2019 11:39:22 AM EDT, Scott Talbert <swt at techie.net> 
> wrote:
>> 
>> 
>> On August 18, 2019 11:03:21 AM EDT, Phil Thompson
>> <phil at riverbankcomputing.com> wrote:
>>> On 18/08/2019 15:45, Scott Talbert wrote:
>>>> On Sun, 18 Aug 2019, Phil Thompson wrote:
>>>> 
>>>>>> See the below example:
>>>>>> 
>>>>>> $ python3
>>>>>> Python 3.7.4 (default, Jul  9 2019, 16:32:37)
>>>>>> [GCC 9.1.1 20190503 (Red Hat 9.1.1-1)] on linux
>>>>>> Type "help", "copyright", "credits" or "license" for more
>>>>>> information.
>>>>>>>>> import PyQt5.sip
>>>>>>>>> import sip
>>>>>>>>> sip
>>>>>> <module 'PyQt5.sip' from
>>>>>> '/usr/lib64/python3.7/site-packages/PyQt5/sip.so'>
>>>>>>>>> 
>>>>>> 
>>>>>> Basically, if you import a private sip module and then import the
>>>>>> public one, it doesn't work.  It seems to be due to this:
>>>>>> 
>>>>>> 
>>> https://www.riverbankcomputing.com/hg/sip/file/4.19-maint/siplib/siplib.c#l1293
>>>>> 
>>>>> Why would you want to do that?
>>>> 
>>>> I don't particularly *want* to do that, but it happens in the wild
>>>> with applications.  For example:
>>>> 
>>>> fsleyes imports matplotlib
>>>> matplotlib imports PyQt as part of its backend detection
>>>> fsleyes imports wxpython
>>>> wxpython imports sip -> fail
>>> 
>>> wxpython uses a private copy of the sip module so I don't see what is
>>> importing a top-level sip module in that situation.
>> 
>> I guess I left out an important detail.  I patch wxPython to use the
>> top-level sip module.
> 
> But this is just one example.  I guess the bottom line is: do you
> consider this a bug, or is your answer that no one should using the
> top-level sip module?

No up to date package should be using a top-level sip module.

If you are patching wxpython(!) then you can remove the reference PyQt 
adds sys.modules first.

Phil


More information about the PyQt mailing list