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

Daniel Holth dholth at gmail.com
Tue Jun 4 18:59:06 CEST 2013


On Tue, Jun 4, 2013 at 12:55 PM, Ronald Oussoren <ronaldoussoren at mac.com> wrote:
>
> On 4 Jun, 2013, at 18:35, Chris Barker - NOAA Federal <chris.barker at noaa.gov> wrote:
>
>> On Mon, Jun 3, 2013 at 3:47 PM, Daniel Holth <dholth at gmail.com> wrote:
>>
>>> That would make sense. Can you come up with code to detect that a
>>> newly compiled extension is universal, and that a Python is?
>>
>> It looks like distutils.util.get_platform() now does the right thing
>> for knowing what the currently running pyton is (see Ronald's message)
>
> Correct. Barring installation errors, such as with some older releases of OSX, distutils.util.get_platform() already returns the correct information (both the supported architectures and the deployment target).
>>
>> For determining the status of a newly compiled extension, I usually
>> simple run the "file" command line utility on it:
>>
>> $ file python
>> python: Mach-O universal binary with 2 architectures
>> python (for architecture ppc):        Mach-O executable ppc
>> python (for architecture i386):       Mach-O executable i386
>>
>> (works for *.so, too...)
>>
>> that could easily be parsed out, but we would still want to know the
>> deployment target, which maybe you could get by parsing otool output:
>>
>> $ otool -L python
>> python (architecture ppc):
>>       /Library/Frameworks/Python.framework/Versions/2.7/Python
>> (compatibility version 2.7.0, current version 2.7.0)
>>       /usr/lib/libmx.A.dylib (compatibility version 1.0.0, current version 47.1.0)
>>       /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>> version 88.3.10)
>> python (architecture i386):
>>       /Library/Frameworks/Python.framework/Versions/2.7/Python
>> (compatibility version 2.7.0, current version 2.7.0)
>>       /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>> version 88.3.10)
>>
>> (compatibility version of libSystem???)
>>
>> But I imagine there is a cleaner way -- Ronald??
>
> The output of 'otool -l' lists (amongst others) the value of LC_VERSION_MIN_MACOSX which is the deployment target.
>
> Both can also be found using macholib ;-)
>
> Ronald

FYI pip (the development version that supports wheel) uses
https://github.com/pypa/pip/blob/develop/pip/pep425tags.py to discover
which tags it will consider. The tags are listed in order of most- to
least-preferred; a file with a tag nearer the beginning of the list
will be preferred when there is more than one choice for a particular
version of a distribution.


More information about the Distutils-SIG mailing list