找到Python的体系结构,但是从Python本身开始

时间:2010-07-28 17:54:03

标签: python macos architecture

基本上我正在寻找一种方法来查找以下内容,但是从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 个答案:

答案 0 :(得分:1)

据我所知,除了检查可执行文件本身以查看哪些架构lipo一起编辑,换句话说,file做什么之外,没有真正可靠的方法。虽然其他地方提到的distutils.util.get_platform()可能是最接近的,但它基于Python构建时的配置信息,并且使用的标准在版本之间甚至在同一版本的发行版之间也发生了变化。

例如,如果您在OS X 10.6上使用4向通用选项(ppcppc64i386x86_64)构建了Python 2.6,{ {1}}应报告get_platform()。但是,OS X 10.6中的Apple支持的Python 2.6报告了相同的字符串,即使它只是一个3向构建(没有macosx-10.6-universal)。编辑:这可能不是最好的例子,因为,考虑到它,您可能无法使用10.6 SDK构建ppc64变体。然而,重点仍然是平台字符串太依赖于上下文而不是完全可靠的。但是,它可能足以满足某些的需求。否则,呼叫ppc64file等可能是最佳方式。

答案 1 :(得分:0)

函数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架构的通用构建”