[issue29605] platform.architecture() with Python2.7-32 misreports architecture on macOS.

Ned Deily report at bugs.python.org
Mon Feb 20 11:32:42 EST 2017


Ned Deily added the comment:

platform.architecture() is documented as giving unreliable results with macOS universal files; see https://docs.python.org/2/library/platform.html#platform.architecture.  The difference in behavior between Python 2.7 and 3.x for the example you show is due to the difference in the value of sys.executable between them on macOS.  On 2.7, sys.executable points to the actual Python interpreter binary, which is a universal binary.  On 3.x, the behavior was changed to not to resolve to the interpreter binary but rather the stub launcher binary and the "-32" launcher has only 32-bit executables:

$ /usr/local/bin/python2.7-32 -c 'import sys;print(sys.executable)'
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
$ /usr/local/bin/python3.6-32 -c 'import sys;print(sys.executable)'
/usr/local/bin/python3.6-32

Because platform.architecture() uses the "file" utility to examine the contents of the file pointed to by sys.executable, this change in 3.x has the side effect of producing the expected "32bit" value on 3.x when Python is invoked in this manner.

However, that doesn't cover all cases.  For example:

$ arch -i386 /usr/local/bin/python3.6 -c 'import sys,platform;print(platform.architecture(), sys.maxsize > 2**32)'
('64bit', '') False

So the 3.x platform.architecture can still produce incorrect results.  One can argue about what value(s) platform.architecture() should return for multi-architecture binaries; languishing Issue10735 covers that.  One could also argue that the value of sys.executable on 2.7 should be changed to behave like 3.x but it's very late in the life of 2.7 to be making a change like that and that change alone would not produce correct results for all cases, like "arch -i386" above.

----------
assignee:  -> lemburg
nosy: +lemburg
title: Python2.7-32 misreports architecture on macOS. -> platform.architecture() with Python2.7-32 misreports architecture on macOS.

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue29605>
_______________________________________


More information about the Python-bugs-list mailing list