web-dev-qa-db-ja.com

私のPythonシェルがOS X上で32ビットモードと64ビットモードのどちらで実行されているかをどうやって確認するのですか?

シェル内からシェルがどのモードにあるのかを知る方法が必要です。

私は platform モジュールを見てみましたが、それは「ビットアーキテクチャと実行形式に使われるリンケージフォーマットについて」についてあなたに話すように思われるだけです:しかしバイナリは64ビットとしてコンパイルされます((私はOS X 10.6)上で走っているので、32ビットモードを強制するためにここで説明されている方法を使っていても、常に64ビットを報告するようです。

359
jkp

更新:一つの方法は、ここで文書化されている sys.maxsizeを見ることです

$ python-32 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
('7fffffff', False)
$ python-64 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
('7fffffffffffffff', True)

sys.maxsizeはPython 2.6で導入されました。古いシステム用のテストが必要な場合は、このもう少し複雑なテストがすべてのPython 2および3リリースで機能するはずです。

$ python-32 -c 'import struct;print( 8 * struct.calcsize("P"))'
32
$ python-64 -c 'import struct;print( 8 * struct.calcsize("P"))'
64

ところで、これにはplatform.architecture()を使いたくなるかもしれません。残念ながら、その結果は常に信頼できるわけではありません 。特にOS Xユニバーサルバイナリの場合

$ 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
363
Ned Deily

端末/コマンドラインでPythonインタプリタを起動すると、次のような行が表示されるかもしれません。

Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32

[MSC v.1500 64 bit (AMD64)]は64ビットPythonを意味します。私の特定の設定で動作します。

225
Dustin

基本的にMatthew Marshallの答えの変形(std.libraryからの構造体を使って):

import struct
print struct.calcsize("P") * 8
169
ChristopheD

Voidポインタのサイズを取得するためにctypesを使ってみてください。

import ctypes
print ctypes.sizeof(ctypes.c_voidp)

32ビットの場合は4、64ビットの場合は8になります。

70

Pythonコンソールを開きます。

import platform
platform.architecture()[0]

プラットフォームに応じて「64ビット」または「32ビット」が表示されます。

あるいは(OS Xバイナリの場合は):

import sys
sys.maxsize > 2**32 
# it should display True in case of 64bit and False in case of 32bit
40
abe312

プログラムではない解決方法については、アクティビティモニターを参照してください。 64ビットプロセスのアーキテクチャを「Intel(64-bit)」としてリストしています。

15
Peter Hosey

私のCentos Linuxシステムでは、次のことを行いました。

1)Pythonインタプリタを起動しました(私は2.6.6を使用しています)
2)次のコードを実行しました。

import platform
print(platform.architecture())

そしてそれは私に与えた

(64bit, 'ELF')
14
rekabbnad

platform.architecture() メモは次のように述べています。

注意:Mac OS X(およびおそらく他のプラットフォーム)では、実行可能ファイルは複数のアーキテクチャを含むユニバーサルファイルです。

現在のインタプリタの「64ビット」を理解するには、sys.maxsize属性を問い合わせるほうがより信頼性があります。

import sys
is_64bits = sys.maxsize > 2**32
9
Shannon Mann

struct.calcsize("P")は、単一のポインタを格納するのに必要なバイト数を返します。 32ビットシステムでは、4バイトが返されます。 64ビットシステムでは、8バイトが返されます。

そのため、32ビットのPythonを実行している場合は32を、64ビットのPythonを実行している場合は64を返します。

Python 2

import struct;print struct.calcsize("P") * 8

Python 3

import struct;print(struct.calcsize("P") * 8)
7
kimbaudi
C:\Users\xyz>python

Python 2.7.6 (default, Nov XY ..., 19:24:24) **[MSC v.1500 64 bit (AMD64)] on win
32**
Type "help", "copyright", "credits" or "license" for more information.
>>>

cmdでpythonを打った後

3
Nikhil
import sys
print(sys.version)

3.5.1(v3.5.1:37a07cee5969、2015年12月6日、01:54:25)[MSC v.190064ビット(AMD64)]

3
betontalpfa

プラットフォームアーキテクチャは信頼できる方法ではありません。代わりに私たち:

$ 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)
1
Prakhar Agarwal