如何检测 Python 是不是作为 64 位应用程序运行? [复制]

Posted

技术标签:

【中文标题】如何检测 Python 是不是作为 64 位应用程序运行? [复制]【英文标题】:How do I detect if Python is running as a 64-bit application? [duplicate]如何检测 Python 是否作为 64 位应用程序运行? [复制] 【发布时间】:2010-12-22 23:43:02 【问题描述】:

可能重复:How do I determine if my python shell is executing in 32bit or 64bit mode?

我正在使用 Windows 注册表做一些工作。根据您是以 32 位还是 64 位运行 python,键值会有所不同。如何检测 Python 是否作为 64 位应用程序而不是 32 位应用程序运行?

注意:我对检测 32 位/64 位 Windows 不感兴趣——只检测 Python 平台。

【问题讨论】:

标记为重复的问题是针对OSX的,这个问题是不同的。投票重新开放 【参考方案1】:
import platform
platform.architecture()

来自Python docs:

查询给定的可执行文件(默认 到 Python 解释器二进制文件) 各种架构信息。

返回一个元组(位,链接),它 包含有关位的信息 架构和链接格式 用于可执行文件。两个值 以字符串形式返回。

【讨论】:

不可靠...***.com/a/12057504/156755 有人能提供 2017 年的更新吗?这一切让菜鸟感到困惑。 sys.maxsize 现在是正确的选择吗?还是 platform.architecture() 现在可以在 OS X、Win 和 Linux 上可靠运行? 很好,成功了。 如果你想在命令提示符下检查,请先运行“python”命令,然后在“>>>”之后运行“import platform;platform.architecture()”。 platform.architecture() 是有问题且昂贵的。从 Py2.6 开始使用sys.maxsize > 2**32。或者至少从 Py2.3 开始更可靠和兼容:struct.calcsize('P') == 8。或ctypes.sizeof(ctypes.c_void_p) == 8。可以使用 gcc 选项 -mx32 左右构建,它们是 64 位应用程序,但默认使用 32 位指针。 'sys.maxsize = ssize_t' 可能并不严格表示 C 指针大小(通常是2**31 - 1),有些系统对代码和数据有不同的指针大小,需要澄清“运行”的确切目的是什么作为 64 位应用程序?”【参考方案2】:

虽然它可能适用于某些平台,但请注意 platform.architecture 并不总是确定 python 是在 32 位还是 64 位中运行的可靠方法。特别是,在某些 OS X 多架构构建中,相同的可执行文件可能能够在任一模式下运行,如下例所示。最快的安全多平台方法是在 Python 2.6、2.7、Python 3.x 上测试 sys.maxsize

$ arch -i386 /usr/local/bin/python2.7
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform, sys
>>> platform.architecture(), sys.maxsize
(('64bit', ''), 2147483647)
>>> ^D
$ arch -x86_64 /usr/local/bin/python2.7
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform, sys
>>> platform.architecture(), sys.maxsize
(('64bit', ''), 9223372036854775807)

【讨论】:

有趣的陷阱。不过,这闻起来有点像虫子。它应该这样工作吗? 我认为这是一个错误。查看平台模块中的代码,它似乎有点脆弱,在这种情况下,它与 Apple 实现其多架构选择功能的方式有关。我添加了一条注释,以确保我们在 python.org OS X 多架构选择功能最终确定时查看此内容。 (我还用苹果打开了一个bug。) 在 Windows x64 Python 上,sys.maxint == 2147483647 所以没有骰子。那是因为 Windows 上的 C int 对于 32 位和 64 位是 32 位。 参见***.com/questions/1405913/… 了解不涉及sys.maxint 的旧Python 版本的另一种方法。

以上是关于如何检测 Python 是不是作为 64 位应用程序运行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?

如何通过脚本检测64位平台

如何使用 .NET 检测 Windows 64 位平台?

Python:如何知道操作系统/CPU 是不是为 64 位

检测32位或64位Windows

安装python