2011-05-24 24 views
20

No puedo encontrar ningún comando para verificar si mi python está compilado para un sistema de 32 bits o un sistema de 64 bits.Qué comando usar para comprobar si python es de 64 bits o de 32 bits

me trataron

pitón

y sólo le dice a la versión

también cuando voy a pitón sitio de descarga que tienen una versión de Python para Linux, pero dos versiones para Mac es decir, 32 bits y 64 bits.

+0

¿Qué sitio de descarga? El sitio de descarga de python.org (http://www.python.org/download/) no proporciona instaladores binarios para Linux, solo Mac OS X y Windows. –

+0

estaba hablando de ese sitio, descargué el archivo tar.bz2. Estaba pensando que para 64 bits tendré el archivo diff tar o el mismo – user2134226

+1

Solo un recordatorio. La mayoría de las distribuciones de Linux tienen instalado Python por defecto, si no es la versión que desea, siempre puede obtener una diferente con su administrador de paquetes. Construir desde cero podría romper su instalación de Python por defecto y empalar las funciones del sistema. –

Respuesta

38

Para Python 2.6 y superiores, se puede utilizar como se documenta sys.maxsizehere:

import sys 
is_64bits = sys.maxsize > 2**32 

ACTUALIZACIÓN: Me he dado cuenta de que realmente no responder a la pregunta planteada. Si bien la prueba anterior le indica con precisión si el intérprete se está ejecutando en una arquitectura de 32 bits o de 64 bits, no responde ni puede responder a la pregunta de cuál es el conjunto completo de arquitecturas para el que se construyó este intérprete. y podría ejecutarse. Como se señaló en la pregunta, esto es importante, por ejemplo, con los archivos ejecutables universales de Mac OS X, donde un archivo ejecutable puede contener código para varias arquitecturas. Una forma de responder esa pregunta es usar el comando del sistema operativo file. En la mayoría de los sistemas, informará las arquitecturas compatibles de un archivo ejecutable. He aquí cómo hacerlo en una línea desde una línea de comandos shell en la mayoría de los sistemas:

file -L $(python -c 'import sys; print(sys.executable)') 

Usando el sistema por defecto de Python en OS X 10.6, la salida es:

/usr/bin/python: Mach-O universal binary with 3 architectures 
/usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 
/usr/bin/python (for architecture i386): Mach-O executable i386 
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc 

En un sistema Linux:

/usr/bin/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, stripped 

por cierto, he aquí un ejemplo de por qué platform no es confiable para este propósito. Una vez más utilizando el sistema de Python en OS X 10.6:

$ 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 
+2

Creo que verificar el tamaño de un puntero (en bytes) es la manera más confiable/consistente de probar esto en las plataformas, simplemente 'import ctypes', y verificar el resultado de' ctypes.sizeof (ctypes.c_void_p) '(que ser '4' bytes para 32 bits, y' 8' para sistemas de 64 bits). – Breakthrough

+0

sys es un módulo integrado y siempre presente. Importar y usar ctypes generalmente es más caro y puede fallar en algunas plataformas. –

6
import platform 
platform.architecture()[0] 
#'32bit' 
+5

Lo sentimos, como se señala en la documentación actual de Python para el comando 'platform', la prueba platform.architecture es * no * confiable en tiempo de ejecución en todas las plataformas, en particular, en compilaciones universales OS X con 32 bits y 64- bit archs según lo solicitado por el OP. Tampoco responde la pregunta que planteó el OP como lo he notado en mi respuesta actualizada. –

+0

No estaba al tanto de eso. ¡Gracias por señalar eso! – Bentley4

1

cmd abierto continuación, escriba pitón entonces las dos líneas siguientes

plataforma importación

plataforma .architecture()

Cuestiones relacionadas