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

Kyle Altendorf sda at fstab.net
Wed Apr 8 16:17:30 BST 2020



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

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.

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

Thanks for your time and help.

Cheers,
-kyle


More information about the PyQt mailing list