如何检测 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 位应用程序运行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章