如何检测Python是否作为64位应用程序运行?
可能重复:如何检测Python是否作为64位应用程序运行?,python,64-bit,Python,64 Bit,可能重复: 我正在用windows注册表做一些工作。根据您是以32位还是64位运行python,键值将有所不同。如何检测Python是否作为64位应用程序而不是32位应用程序运行 注意:我对检测32位/64位窗口不感兴趣,只对Python平台感兴趣 import platform platform.architecture() 从: 查询给定的可执行文件(默认值) 到Python解释器(二进制)的 各种架构信息 返回一个元组(位、链接),该元组 包含有关位的信息 体系结构和链接格式 用于可执
我正在用windows注册表做一些工作。根据您是以32位还是64位运行python,键值将有所不同。如何检测Python是否作为64位应用程序而不是32位应用程序运行 注意:我对检测32位/64位窗口不感兴趣,只对Python平台感兴趣
import platform
platform.architecture()
从:
查询给定的可执行文件(默认值)
到Python解释器(二进制)的
各种架构信息
返回一个元组(位、链接),该元组
包含有关位的信息
体系结构和链接格式
用于可执行文件。两种价值观
作为字符串返回
虽然它可以在某些平台上工作,但要注意,
platform.architecture
并不总是确定python是以32位还是64位运行的可靠方法。特别是,在某些OSX多体系结构构建上,同一可执行文件可能能够在任一模式下运行,如下例所示。最快的安全多平台方法是在Python2.6、2.7和Python3.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)
有意思,明白了。不过闻起来有点像虫子。它应该是这样工作的吗?我会认为这是一个错误。看看平台模块中的代码,它似乎有点脆弱,在这种情况下,它与苹果实现其多拱门选择功能的方式有关。我添加了一个注释,以确保在python.org OS X multi-arch选择功能最终确定时我们会看到这一点。(我还打开了苹果的一个bug。)在Windows x64 python上,
sys.maxint==2147483647
因此没有骰子。这是因为Windows上的C int对于32位和64位来说是32位的。有关不涉及sys.maxint
的旧Python版本的另一种方法,请参阅。标记为重复的问题是针对OSX的,这个问题不同。投票表决不可靠。。。有人能告诉我2017年的最新情况吗。这让noobs很困惑。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\u void\u p)==8
。可以使用gcc选项-mx32
或其他类似的版本,它们是64位应用程序,但默认使用32位指针sys.maxsize=ssize_t'可能不严格表示C指针大小(通常是2**31-1
),有些系统的代码和数据指针大小不同,需要澄清“作为64位应用程序运行”的确切目的是什么