【发布时间】: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 进行检查)