The pep425 design tries to avoid assigning any ordering to the tag
components. For the py version we just add py27, py26, py25 for example to
the list of accepted tags. Perhaps the same strategy works for osx. So the
osx 10.9 installer would generate old osx tags to add to its acceptable set.
On Mar 6, 2014 7:59 PM, "MinRK"
Hello,
I proposed a patch https://github.com/pypa/pip/pull/1465 to pip, with respect to treatment of the platform tag on OS X, and Chris Barker proposed that I bring the discussion here.
The situation:
PEP 425 describes the platform tag as:
The platform tag is simply distutils.util.get*platform() with all hyphens - and periods . replaced with underscore *.
but the PEP makes no mention of what should be done on OS X. On OS X, get_platform() has the form:
macosx_10_6_intel
where 10_6 indicates that the OS X deployment target (of Python) is 10.6, and intel indicates that it is a fat binary with both x86_64 and i386. Other values for the arch include 'ppc', 'ppc64', and 'universal', another multi-arch tag indicating a fat binary with all four of 32/64bit intel and ppc.
Where PEP 425 causes problems (or pip's implementation thereof), is in testing strict equality of this value, not taking into account the meaning of its contents. I proposed two changes:
1.
Use >= comparison for the deployment target
From the OS X platform documentationhttps://developer.apple.com/library/mac/documentation/DeveloperTools/Concept... :
Choose a deployment target. This identifies the earliest OS version on which your software can run.
so a binary with deployment target = 10.6 should be installable on OS X >= 10.6.
This change restores the longstanding behavior of easy_install, where 10.6 eggs are installable on >= 10.6. 2.
support multi-arch names (intel, universal) on their respective components - intel is valid on {x86_64, i386} - universal is valid on {intel, x86_64, i386, ppc64, ppc}
easy_install, like pip, also does strict comparison here, so this would be new behavior.
My actual use case:
I have a wheel (pyzmq), which works on any intel-based Python targeting OS X >= 10.6. To express this with pip-1.5, the filename has to be:
pyzmq-14.1.0-cp27-none-macosx_10_6_intel.macosx_10_6_x86_64.macosx_10_6_i386.macosx_10_7_intel.macosx_10_7_x86_64.macosx_10_7_i386.macosx_10_8_intel.macosx_10_8_x86_64.macosx_10_8_i386.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_9_i386.whl
and it has to grow every time there is a new OS release.
With both proposed changes, I could communicate the same information with just one tag:
pyzmq-14.1.0-cp27-none-macosx_10_6_intel.whl
With just the first change, it would need three:
pyzmq-14.1.0-cp27-none-macosx_10_6_intel.macosx_10_6_x86_64.macosx_10_6_i386.whl
Any feedback from experts, especially if my understanding of deployment targets or fat binaries is incorrect, would be much appreciated.
Thanks,
-MinRK
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org https://mail.python.org/mailman/listinfo/distutils-sig