【问题标题】: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的,这个问题是不同的。投票重新开放

标签: python 64-bit


【解决方案1】:
import platform
platform.architecture()

来自Python docs

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

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

【讨论】:

  • 有人能提供 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 位。
  • 参见stackoverflow.com/questions/1405913/… 了解不涉及sys.maxint 的旧Python 版本的另一种方法。
猜你喜欢
  • 2023-04-02
  • 2015-06-28
  • 2010-09-20
  • 1970-01-01
  • 2020-03-20
  • 2011-09-25
  • 1970-01-01
  • 2012-10-23
  • 2010-12-11
相关资源
最近更新 更多