Поиск архитектур, для которых был построен Python, но из самого Python - PullRequest
0 голосов
/ 28 июля 2010

По сути, я ищу способ найти следующее, но изнутри Python без необходимости запуска системных команд:

$ file `which python2.7`
/Library/.../2.7/bin/python2.7: Mach-O universal binary with 2 architectures
/Library/.../2.7/bin/python2.7 (for architecture i386):    Mach-O executable i386
/Library/.../2.7/bin/python2.7 (for architecture x86_64):  Mach-O 64-bit executable x86_64

Что-то вроде:

>>> get_mac_python_archs()
['i386', 'x86_64']
>>>

Возможно?

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Насколько я знаю, нет действительно надежного способа, кроме как проверить сами исполняемые файлы, чтобы увидеть, какие архитектуры были lipo объединены, другими словами, что делает file.Хотя distutils.util.get_platform(), отмеченное в другом месте, вероятно, ближе всего подходит, оно основано на информации о конфигурации во время сборки Python, и используемые критерии менялись между выпусками и даже среди дистрибутивов того же выпуска.построил Python 2.6 на OS X 10.6 с 4-сторонней универсальной опцией (ppc, ppc64, i386, x86_64), get_platform() должен сообщить macosx-10.6-universal.Тем не менее, поддерживаемый Apple Python 2.6 в OS X 10.6 сообщает об одной и той же строке, хотя это только 3-сторонняя сборка (без ppc64).РЕДАКТИРОВАТЬ: Это может быть не лучший пример, так как, если подумать, вы, вероятно, не могли бы создать вариант ppc64 с 10,6 SDK.Тем не менее, по-прежнему сохраняется точка зрения, что строка платформы слишком зависима от контекста, чтобы быть полностью надежной.Это может быть достаточно надежным для некоторых потребностей.В противном случае лучше всего обратиться к file или otool и т. Д.

0 голосов
/ 28 июля 2010

Функция platform.architecture возвращает только работающую платформу:

Python 2.6.5 (r265:79359, Mar 24 2010, 01:32:55) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> platform.machine()
'i386'

Ближайшее, что я могу получить, это используя distutils.util.get_platform:

>>> import distutils.util
>>> distutils.util.get_platform()
'macosx-10.3-fat'

, который является полным ответом, если вы используете Python 2.7 / 3.2, как вы можете видеть в документации. «Начиная с Python 2.7 и Python 3.2 архитектура fat3 используется для универсальной 3-сторонней сборки (ppc, i386, x86_64), а intel - для универсальной сборки с архитектурами i386 и x86_64»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...