用哪个命令来检查Python是64位还是32位?

37

我找不到任何命令来检查我的Python编译成了32位系统还是64位系统。

我尝试了:

python

但它只告诉版本号。

当我去Python下载网站时,他们为Linux提供了一个版本的Python,但为Mac提供了两个版本,即32位和64位。


哪个下载站点?Python官网下载站点(http://www.python.org/download/)不提供Linux的二进制安装程序,仅提供Mac OS X和Windows的。 - Ned Deily
我在谈论那个网站,我下载了tar.bz2文件。我在想64位系统会有不同的tar文件还是相同的。 - Mirage
1
提醒一下,大多数Linux发行版默认安装了Python,如果不是你想要的版本,你可以通过软件包管理器获取其他版本。从头开始构建可能会破坏你的默认Python安装并影响系统功能。 - Wang Dingwei
4个回答

56

对于Python 2.6及以上的版本,您可以使用文档这里所述的sys.maxsize

import sys
is_64bits = sys.maxsize > 2**32

更新:我注意到我实际上没有回答所提出的问题。尽管上面的测试确实可以准确地告诉您解释器是在32位还是64位架构上运行,但它不能回答这个解释器构建和运行的完整架构集合是什么。如问题中所指出的,在Mac OS X通用可执行文件中,这很重要,因为一个可执行文件可能包含多个架构的代码。回答这个问题的一种方法是使用操作系统的file命令。在大多数系统上,它将报告可执行文件的支持架构。以下是如何在大多数系统的shell命令行中使用一行来执行此操作:

file -L $(python -c 'import sys; print(sys.executable)')

在OS X 10.6上使用系统默认的Python,输出如下:

/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc

在一个Linux系统上:

/usr/bin/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, stripped

顺便说一下,这里有一个例子说明为什么在这个目的上 platform 不可靠。同样是在 OS X 10.6 上使用系统 Python:

$ arch -x86_64 /usr/bin/python2.6 -c 'import sys,platform; print platform.architecture()[0], sys.maxsize > 2**32'
64bit True
$ arch -i386 /usr/bin/python2.6 -c 'import sys,platform; print platform.architecture()[0], sys.maxsize > 2**32'
64bit False

6
我认为检查指针的大小(以字节为单位)是跨平台测试此功能最可靠/一致的方法 - 只需 import ctypes,并检查 ctypes.sizeof (ctypes.c_void_p) 的输出(在 32 位系统中将为 4 字节,在 64 位系统中将为 8 字节)。 - Breakthrough
sys是一个内置的模块并且始终存在。导入和使用ctypes通常更加昂贵,并且可能在某些平台上失败。 - Ned Deily
警告!如果你在Windows上,百分之百确定你有正确的wheel文件,但仍然出现错误,请尝试将pip作为模块运行:python -m pip install your.whl - 不知道为什么,但是有效。另外,更新pip(作为模块)和setuptools(需要管理员权限)。 - frenzy

18
import platform
platform.architecture()[0]
#'32bit'

6
抱歉,根据当前Python文档中的platform命令,platform.architecture测试在所有平台上执行时都是不可靠的,特别是在OP所询问的同时具有32位和64位架构的OS X通用版本上。 此外,正如我在更新的回答中所指出的那样,它也无法回答OP提出的问题。 - Ned Deily

6

首先,打开命令提示符并输入

$ python

然后,输入以下两行内容。
>>> import platform

>>> platform.architecture()

1

在Linux控制台中输入:

  1. 如果您想通过使用其运行命令来检查应用程序是否具有64位或32位架构:
type -p <command_to_run_application> | xargs readlink -f | xargs file -b | sed 's/, /\n/g' | sed -n 2p

在使用应用程序的完整路径时,如果您想检查应用程序是否具有64位或32位架构:
file -b <full_path_to_an_application> | sed 's/, /\n/g' | sed -n 2p

例如,对于Python 3,相应的命令可以是:
type -p python3 | xargs readlink -f | xargs file -b | sed 's/, /\n/g' | sed -n 2p
file -b /usr/bin/python3.5 | sed 's/, /\n/g' | sed -n 2p

可能的输出:
x86-64

或者

Intel 80386

或者

ARM

如果输出为“Intel 80386”,则应用程序具有32位体系结构。
如果输出为“x86-64”,则应用程序具有64位体系结构。

或其他。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接