检查 Python 运行的是 32 位还是 64 位

使用 python -c "import sys; print(sys.maxsize > 2**32)" 命令检查 Python 是以 32 位还是 64 位运行的。 如果 Python 以 64 位运行,该命令将返回 True;如果以 32 位运行,则返回 False。

# 👇️ 如果 Python 解释器以 64 位运行,则返回 True
# 适用于 Linux、macOS 和 Windows
$ python -c "import sys; print(sys.maxsize > 2**32)"

我们可以使用相同的方法从脚本内部检查 Python 解释器运行的是 32 位还是 64 位。

import sys

is_64bits = sys.maxsize > 2**32
print(is_64bits)

if is_64bits:
    print('✅ Python is running as 64-bit application')
else:
    print('✅ Python is running as 32-bit application')

如果 Python 解释器以 64 位运行,则 sys.maxsize > 2**32 表达式返回 True,如果以 32 位运行,则返回 False

这是文档推荐的方法。

sys.maxsize 属性返回一个整数,在 32 位平台上通常为 2**31 - 1,在 64 位平台上通常为 2**63 - 1

如果 sys.maxsize 属性返回大于 2**32 的值,则 Python 解释器以 64 位运行。

这种方法适用于 Windows、macOS 和 Linux。

如果使用的是 Windows,我们还可以启动 shell 并查看消息以检查我们的 Python 是否作为 32 位或 64 位应用程序运行。

“[MSC v.1933 64 位 (AMD64)]”消息表明 Python 正在作为 64 位应用程序运行。

一些在线示例可能会使用 platform.architecture 方法来检查 Python 解释器是否以 32 位或 64 位运行。

import platform

print(platform.architecture()[0])  # 👉️ 64bit

但是,该方法的输出对于 macOS 和其他一些平台并不可靠,因为可执行文件可能是包含多种体系结构的通用文件。

sys.maxsize > 2**32 表达式在所有平台上都是可靠的。

我们还可以使用 struct.calcsize() 方法来检查 Python 是作为 32 位还是 64 位应用程序运行。

import struct

print(struct.calcsize('P') * 8)  # 👉️ 64

if struct.calcsize('P') * 8 == 64:
    print('Python is running as 64-bit application')
else:
    print('Python is running as 32-bit application')

P 字符表示 void * (通用指针)。该指针在 32 位系统上为 4 个字节,在 64 位系统上为 8 个字节。

调用 struct.calcsize() 方法计算存储单个指针所需的字节数。

结果在 32 位系统上为 4,在 64 位系统上为 8。

我们将 4 或 8 乘以 8 得到 32 位或 64 位的结果。

选择哪种方法是个人喜好的问题。 我会使用 sys.maxsize > 2**32 因为它在文档中被推荐并且适用于所有操作系统。