[PyQt] Private sip modules conflict with public sip module

Scott Talbert swt at techie.net
Mon Aug 19 01:31:38 BST 2019



On August 18, 2019 12:31:59 PM EDT, Phil Thompson <phil at riverbankcomputing.com> wrote:
>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.

That seems way too fragile.  I would have to do that anywhere wx imports sip, and any wx users that use sip would have to do it too.

I can probably live with switching back to the namespaced sip module though.

Scott


More information about the PyQt mailing list