[Distutils] Binary Wheels and "universal" builds on OS-X

Daniel Holth dholth at gmail.com
Mon Jun 3 18:57:05 CEST 2013


On Mon, Jun 3, 2013 at 12:25 PM, Chris Barker - NOAA Federal
<chris.barker at noaa.gov> wrote:
> On Fri, May 31, 2013 at 3:38 PM, Daniel Holth <dholth at gmail.com> wrote:
>> Wheel already supports compound tags. Just like py2.py3-none-any a tag
>
> Is this from PEP 425? It's still a little unclear to me exactly how
> those tags are to be used, but, yes, this seems to be the right
> direction.
>
>> py3-none-x86.ppc (with real platform names) would work. Does that make sense
>> for Mac?
>
> hmm, for one, I"m confused about the "Python Tag" vs. the "ABI Tag"
> vs. the "Platform Tag" -- I guess these all get mushed together in the
> filename?
>
> but a few issues anyway: it looks like the platform tag has the OS and
> a architecture in one, so would a universal bild on the mac be:
>
> macosx_10_3_i386.ppc
> or
> macosx_10_3_i386.macosx_10_3_ppc
>
> I'm thinking the latter, though it gets pretty wordy:
>
> A potential full name:
>
> my_package-3_2-cp27-cp27-macosx_10_3_i386.macosx_10_3_ppc.whl
>
> (Im a little confused about python version tag vs. ABI tag, in the
> case of a compiled extension...)
>
> But a potential confusion -- in this case, having two platform tags
> indicates that _both_ are present, rather than one thing that works
> with either. Maybe that would always be the case with platform.
>
> So if that's how the wheel is specified, we still need the other side
> of the process:
>
> Installing:
>
> A "universal" macpython binary needs to know that it is universal
> (distutils.util.get_platform() returns only the currently running
> version). Once that is know, the installer needs to make some choice:
>
> If a matching universal binary is found -- use it
> If a non-universal binary is found that matches the currently running
> python -- then what? install it with a warning? raise an exception?
>
> -Chris

The Python Tag is the Python implementation or language version. It
lets you indicate compatibility with only CPython or Jython or PyPy
even if you do not have compiled extensions:

cp27, py27, py2, py3

The ABI tag is the Python ABI. The difference is that it will indicate
"d"ebug "m"alloc, "u"nicode:

none (also means "we don't know"), cp33dm, abi3

The platform tag is the OS+architecture.

They get joined together with a dash '-'.join(python, abi, platform)

For compatibility matching the tags are expanded to the Cartesian
product of the string.split('.') of each of the python, abi, and
platform tags. This is mostly only useful when only one part of the
tag is compound.
http://www.python.org/dev/peps/pep-0425/#compressed-tag-sets

There used to be a rule about preferring packages with the fewest
number of tags in case of a tie but I can't seem to find it now. It's
probably not very important.

If this doesn't work then it might be more useful to invent a tag like
"macosx_10_3_universal" for some value of universal.

Daniel Holth


More information about the Distutils-SIG mailing list