using sip-wheel on MacOS

Phil Thompson phil at riverbankcomputing.com
Tue Apr 28 21:46:14 BST 2020


On 28/04/2020 18:49, Steve Borho wrote:
>> On Apr 28, 2020, at 3:58 AM, Phil Thompson 
>> <phil at riverbankcomputing.com> wrote:
>> 
>> On 28/04/2020 04:55, Steve Borho wrote:
>>> Hello,
>>> On Linux and Windows I can use sip-wheel to build binary wheels that
>>> will gladly use the Qt libraries packaged by PyQt5, by compiling
>>> against the same local version of Qt.
>>> But when I try this on Mac, it is linking in the full paths to the
>>> local (homebrew) Qt libraries
>>> $ otool -L foo.cpython-37m-darwin.so
>>> foo.cpython-37m-darwin.so:
>>> 	/usr/local/opt/qt/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport
>>> (compatibility version 5.14.0, current version 5.14.1)
>>> 	/usr/local/opt/qt/lib/QtOpenGL.framework/Versions/5/QtOpenGL
>>> (compatibility version 5.14.0, current version 5.14.1)
>>> 	/usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets
>>> (compatibility version 5.14.0, current version 5.14.1)
>>> 	/usr/local/opt/qt/lib/QtDataVisualization.framework/Versions/5/QtDataVisualization
>>> (compatibility version 5.14.0, current version 5.14.1)
>>> 	/usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui 
>>> (compatibility
>>> version 5.14.0, current version 5.14.1)
>>> I see that sip-wheel has an option for:
>>>  --target-qt-dir DIR   the Qt libraries will be found in DIR when the 
>>> wheel
>>>                        is installed
>>> but it is not clear how to target the PyQt5 packaged Qt libraries.
>>> Has anyone else tackled this?  Thanks
>> 
>> Assuming you are going to package a Qt installation with your wheel 
>> using pyqt-bundle at a later stage then pass '--target-qt-dir Qt/lib'.
>> 
>> This will be documented in the next release of the PyQt docs.
> 
> Ideally the binaries in the wheel would use the Qt libraries in
> ../PyQt5/Qt/lib/* from site-packages.
> 
> Does my app need to package its own copy of the Qt libraries if it
> compiles its own shared library?
> 
> I just realized my Linux wheels have the same issue.  They are not
> using PyQt5/Qt/lib, they are relying on the Qt libraries being present
> where they were compiled.

I'm not sure what it is you are trying to achieve. The wheels on PyPI 
are created by running sip-wheel using the --target-qt-dir. The wheel is 
compiled against a local Qt installation but targeted for a bundled copy 
of Qt. That wheel, if installed, would not run. pyqt-bundle is then run 
to bundle a copy of that local Qt installation to create a new wheel 
(the one uploaded to PyPI).

Phil


More information about the PyQt mailing list