[PyQt] sip-build --debug and wheels on a Raspberry Pi

Phil Thompson phil at riverbankcomputing.com
Wed Apr 8 16:35:45 BST 2020

On 08/04/2020 16:17, Kyle Altendorf wrote:
> On 2020-04-08 10:26, Phil Thompson wrote:
>> On 08/04/2020 13:03, Kyle Altendorf wrote:
>>> On 2020-04-08 07:29, Phil Thompson wrote:
>>>> On 08/04/2020 04:10, Kyle Altendorf wrote:
>>>>> 2) Building a wheel with pip on an ARM Raspberry Pi results in a 
>>>>> file
>>>>> with manylinux2014_x86_64 in the name.  Perhaps something based on
>>>>> distutils.util.get_platform() (plus pep425 described modification 
>>>>> of
>>>>> the value) and replacing linux with manylinux<whatever>?  Or you'd
>>>>> think some official library would expose this calculation for you 
>>>>> to
>>>>> use.
>>>>>     PyQt5-5.14.2-cp35.cp36.cp37.cp38-abi3-manylinux2014_x86_64.whl
>>>>> Backstory: I'm trying to help piwheels get a build going for PyQt5.
>>>> <whatever> is chosen according to the glibc requirements of Qt. It 
>>>> is
>>>> specified using 'minimum-glibc-version' in ...
>>>> https://www.riverbankcomputing.com/static/Docs/sip/pyproject_toml.html#tool-sip-project-section
>>> Sorry, I added to my description and it became less clear.  The
>>> concern is the x86_64 part, I have no knowledge of errors in the
>>> manylinux part.  Raspberry Pi are armv7l.  PEP425 describes building
>>> the platform tag, albeit without the manylinux part.
>>> https://www.python.org/dev/peps/pep-0425/#platform-tag
>>> So maybe distutils.util.get_platform().replace('-', '.').replace('.',
>>> '_').replace(sys.platform, the_selected_manylinux_tag).  Or maybe the
>>> wheel package has something, etc.  I haven't looked at what this does
>>> in macOS so I certainly may still be way off.
>>>     >>> distutils.util.get_platform().replace('-', '.').replace('.',
>>> '_').replace(sys.platform, 'manylinux2014')
>>>     'manylinux2014_x86_64'
>>>     >>> distutils.util.get_platform().replace('-', '.').replace('.',
>>> '_').replace(sys.platform, 'manylinux2014')
>>>     'manylinux2014_armv7l'
>> manylinux is only defined for Intel platforms.
>> I assume a normal setuptools is being used to build these...
>> https://www.piwheels.org/project/PyQt5-sip/
>> ...so it would seem to make sense to follow that convention.
>> Can you tell me *exactly* what get_platform() returns in a Pi?
> It looks like manylinux2014 added references to non-intel 
> architectures.
>     https://www.python.org/dev/peps/pep-0599/#the-manylinux2014-policy

Thanks. I assume we can treat armv6l in the same way.

> On the Raspberry Pi I am running on (from Mythic Beasts, where
> piwheels does their builds):
>     root at raspberrypi:~# /usr/bin/python3 -c 'import distutils.util;
> print(repr(distutils.util.get_platform()))'
>     'linux-armv7l'
> To include the Pi version:
>     root at raspberrypi:~# cat /proc/device-tree/model
>     Raspberry Pi 3 Model B Plus Rev 1.3root
> At this point I am just getting a procedure setup to build _some_
> PyQt5 wheel.  From there I'll check back with piwheels to see what
> their existing mechanisms are and how to fit into them.  Also what
> adjustments should be made to make a proper wheel.  I'm sure I'll
> learn several things as I work through this.

Can you check with Ben now that 'manylinux2014_armv7l' will be Ok?

Note that this is different to what setuptools on the Pi seems to do. 
The issue is whether pip on the Pi is new enough to handle 
manylinux2014. If not I'll provide an option for the default to be 

> Note that my understanding is that piwheels likes to build wheels that
> leverage the system packages.  For example, the PyQt5 wheel likely
> will not include Qt.  Not my preference and not manylinux compatible
> but...  Anyways, for completeness and in case anyone wants to follow,
> here's a link to the relevant piwheels issue.
>     https://github.com/piwheels/packages/issues/3

I think it is right for Qt not to be included. For a system with limited 
resources you don't want it running multiple versions of Qt.

I'm keen to help get this sorted so that the installation of Mu 
(https://codewith.mu) is as painless as possible.


More information about the PyQt mailing list