【问题标题】:How to check if Python is running on an M1 mac, even under Rosetta?如何检查 Python 是否在 M1 mac 上运行,即使在 Rosetta 下也是如此?
【发布时间】:2022-11-09 05:26:06
【问题描述】:

我有启动进程的 python 3.10 代码,但如果它在 M1 Mac 上运行,它需要运行不同的进程。

即使python进程在Rosetta中运行,有没有办法可靠地检测你是否在M1 Mac上?

我试过这个:

print(sys.platform)

# On Intel silicon:
darwin

# On M1 silicon:
darwin

但它总是打印“darwin”。

我尝试在 os.* 和 sys.* 库中四处寻找,我发现最好的是:

print(os.uname())

# On Intel silicon:
posix.uname_result(sysname='Darwin', nodename='XXX', release='21.5.0', version='Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:22 PDT 2022; root:xnu-8020.121.3~4/RELEASE_X86_64', machine='x86_64')

# On M1 silicon:
posix.uname_result(sysname='Darwin', nodename='XXX', release='21.4.0', version='Darwin Kernel Version 21.4.0: Fri Mar 18 00:47:26 PDT 2022; root:xnu-8020.101.4~15/RELEASE_ARM64_T8101', machine='x86_64')

我假设它在 M1 机器上返回 machine= 'x86_64' 因为 Python 在 Rosetta 中运行? version 字段确实看起来不同:

# Intel
version='Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:22 PDT 2022; root:xnu-8020.121.3~4/RELEASE_X86_64'

# M1
version='Darwin Kernel Version 21.4.0: Fri Mar 18 00:47:26 PDT 2022; root:xnu-8020.101.4~15/RELEASE_ARM64_T8101'

如果您在 Rosetta 下运行,解析 uname() 并在版本字段中查找“ARM”是检查 M1 芯片的最佳方法吗?

【问题讨论】:

  • platform.processor() 呢?这给了我在 M1 上的arm(尚未使用 Rosetta 进行检查)

标签: python apple-m1


【解决方案1】:

您可以只检查处理器名称,然后以这种方式检查。获得它的最简单方法是使用cpuinfo 模块。 cpuinfo.get_cpu_info()['brand_raw'] 返回带有处理器品牌和名称的字符串,例如“Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz”。如果你只想拥有“i5-6500”,你可以从字符串中取出第三个单词。

import cpuinfo
cpudata = cpuinfo.get_cpu_info()['brand_raw']
cpuname = cpudata.split(" ")[1]

如果你然后print(cpuname),它应该只输出处理器“名称”,所以在这种情况下是 i5-6500。

【讨论】:

    【解决方案2】:

    使用 Python 内置的 platform 库来判断 Mac 是否为 M1/M2:

    import platform
    
    print(platform.processor())
    

    在 M1/M2 Mac 上 --> arm

    在较旧的 Mac 上 --> i386

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 2021-03-10
      • 1970-01-01
      • 2015-10-12
      • 2021-03-01
      • 2021-04-10
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      相关资源
      最近更新 更多