【问题标题】:Finding the architectures that Python was built for, but from within Python itself查找 Python 构建的体系结构,但从 Python 本身内部
【发布时间】:2010-07-29 06:11:27
【问题描述】:

基本上我正在寻找一种方法来查找以下内容,但无需运行系统命令就可以在 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']
>>>

可能吗?

【问题讨论】:

  • 使用文件或otool等系统命令有什么问题?在请人弄清楚如何做到这一点之前,礼貌地解释一下为什么你不能用简单的方法做到这一点,如果只是为了让我们相信你真的不能用简单的方法做到这一点。
  • @user57368: 如果这些信息内置到 Python lib 中就更好了,否则我将不得不启动一个新进程(lipofile),这会增加启动时间我的程序......虽然这似乎不是一个明显的延迟。

标签: python macos architecture


【解决方案1】:

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

例如,如果您在 OS X 10.6 上使用 4 路通用选项(ppcppc64i386x86_64)构建了 Python 2.6,get_platform() 应该报告 macosx-10.6-universal。但是,OS X 10.6 中 Apple 提供的 Python 2.6 报告了相同的字符串,即使它只是 3 路构建(没有 ppc64)。编辑:这可能不是最好的例子,因为仔细想想,您可能无法使用 10.6 SDK 构建 ppc64 变体。然而,这一点仍然认为平台字符串过于依赖上下文而不能完全可靠。不过,对于一些的需求,它可能足够可靠。否则,呼叫fileotool 等可能是最好的方法。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 2016-06-25
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2012-12-12
      相关资源
      最近更新 更多