script instalar español ejecutar desde descargar consola como archivo python macos

instalar - ¿Cómo puedo determinar si mi shell de Python se está ejecutando en modo de 32 bits o de 64 bits en OS X?



instalar python en windows (13)

Agrupando todo ...

Teniendo en cuenta que:

  • La pregunta es para OSX (tengo una VM antigua (y crackeada) con una versión antigua de Python )
  • Mi env principal es Win
  • Solo tengo la versión de 32 bits instalada en Win (y construí una "lisiada" en Lnx )

Voy a ejemplificar en las 3 plataformas. Estaré usando Python3 y Python2 . Sin embargo, las URL de los documentos serán específicas de Python3 .

  1. Compruebe [Python 3]: sys. Valor de tamaño máximo: compárelo con 0x100000000 ( 2 ** 32 ): mayor para 64 bits , más pequeño para 32 bits :
    • OSX 9 x64 :
      • Python 2.7.10 x64 :

        >>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) ''Python 2.7.10 (default, Oct 14 2015, 05:51:29) /n[GCC 4.8.2] on darwin'' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 (''0x7fffffffffffffff'', True)

    • Ubtu 16 x64 :
      • Python 3.5.2 x64 :

        >>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) ''Python 3.5.2 (default, Nov 23 2017, 16:37:01) /n[GCC 5.4.0 20160609] on linux'' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 (''0x7fffffffffffffff'', True)

      • Python 3.6.4 x86 :

        >>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) ''Python 3.6.4 (default, Apr 25 2018, 23:55:56) /n[GCC 5.4.0 20160609] on linux'' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 (''0x7fffffff'', False)

    • Gana 10 x64 :
      • Python 3.5.4 x64 :

        >>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) ''Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32'' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 (''0x7fffffffffffffff'', True)

      • Python 3.6.2 x86 :

        >>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) ''Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32'' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 (''0x7fffffff'', False)


  1. Utilice [Python 3]: struct. calcsize ( fmt ) para determinar el tamaño del objeto producido por el formato (puntero). En otras palabras, determina el tamaño del puntero ( sizeof(void*) ):
    • OSX 9 x64 :
      • Python 2.7.10 x64 :

        >>> import struct >>> truct.calcsize("P") * 8 64

    • Ubtu 16 x64 :
      • Python 3.5.2 x64 :

        >>> import struct >>> truct.calcsize("P") * 8 64

      • Python 3.6.4 x86 :

        >>> import struct >>> truct.calcsize("P") * 8 32

    • Gana 10 x64 :
      • Python 3.5.4 x64 :

        >>> import struct >>> truct.calcsize("P") * 8 64

      • Python 3.6.2 x86 :

        >>> import struct >>> truct.calcsize("P") * 8 32


  1. Use [Python 3.5]: ctypes - Una biblioteca de funciones foránea para Python . También se reduce a determinar el tamaño de un puntero ( sizeof(void*) ). Como nota, ctypes utiliza # 2. (no necesariamente para esta tarea) a través de "$ {PYTHON_SRC_DIR} / Lib / ctypes / __ init__.py" (alrededor de la línea # 15 ):
    • OSX 9 x64 :
      • Python 2.7.10 x64 :

        >>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64

    • Ubtu 16 x64 :
      • Python 3.5.2 x64 :

        >>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64

      • Python 3.6.4 x86 :

        >>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 32

    • Gana 10 x64 :
      • Python 3.5.4 x64 :

        >>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64

      • Python 3.6.2 x86 :

        >>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 32


  1. platform.architecture() platform.architecture() !!! NO es confiable en OSX !!! debido al formato de archivos múltiples ejecutables (o .dylib ) (en algunos casos, utiliza # 2. ):
    • OSX 9 x64 :
      • Python 2.7.10 x64 :

        >>> import platform >>> platform.architecture() (''64bit'', '''')

    • Ubtu 16 x64 :
      • Python 3.5.2 x64 :

        >>> import platform >>> platform.architecture() (''64bit'', ''ELF'')

      • Python 3.6.4 x86 :

        >>> import platform >>> platform.architecture() (''32bit'', ''ELF'')

    • Gana 10 x64 :
      • Python 3.5.4 x64 :

        >>> import platform >>> platform.architecture() (''64bit'', ''WindowsPE'')

      • Python 3.6.2 x86 :

        >>> import platform >>> platform.architecture() (''32bit'', ''WindowsPE'')


  1. Lame workaround ( gainarie ): invoca un comando externo ( [man7]: FILE (1) ) a través de [Python 3]: os. sistema ( comando ) . Las limitaciones del # 4. aplicar (a veces incluso podría no funcionar):
    • OSX 9 x64 :
      • Python 2.7.10 x64 :

        >>> import os >>> os.system("file {:s}".format(os.path.realpath(sys.executable))) /opt/OPSWbuildtools/2.0.6/bin/python2.7.global: Mach-O 64-bit executable x86_64

    • Ubtu 16 x64 :
      • Python 3.5.2 x64 :

        >>> import os >>> os.system("file {:s}".format(os.path.realpath(sys.executable))) /usr/bin/python3.5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=59a8ef36ca241df24686952480966d7bc0d7c6ea, stripped

      • Python 3.6.4 x86 :

        >>> import os >>> os.system("file {:s}".format(os.path.realpath(sys.executable))) /home/cfati/Work/Dev/Python-3.6.4/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=5c3d4eeadbd13cd91445d08f90722767b0747de2, not stripped

    • Gana 10 x64 :
      • la utilidad de archivo no está presente, hay otras herramientas de terceros que se pueden usar, pero no voy a insistir en ellas


Ganar específico:

  1. Compruebe las variables env (p. Ej., % PROCESSOR_ARCHITECTURE% (u otros)) a través de [Python 3]: os. ambiente :
    • Gana 10 x64 :
      • Python 3.5.4 x64 :

        >>> import os >>> os.environ["PROCESSOR_ARCHITECTURE"] ''AMD64''

      • Python 3.6.2 x86 :

        >>> import os >>> os.environ["PROCESSOR_ARCHITECTURE"] ''x86''


  1. [Python 3]: sys. versión (también se muestra en la línea al iniciar el intérprete)
    • Compruebe # 1.

Necesito una forma de saber en qué modo está el shell desde dentro del shell.

He intentado buscar en el módulo de la platform , pero parece que solo te dice "sobre la arquitectura de bits y el formato de enlace utilizado para el ejecutable": el binario se compila como 64 bits (estoy ejecutando en OS X 10.6), parece que siempre informa de 64 bits, aunque estoy usando los métodos descritos aquí para forzar el modo de 32 bits).


Al iniciar el intérprete de Python en la línea de comandos / terminal, también puede ver una línea como:

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

Donde [MSC v.1500 64 bit (AMD64)] significa Python de 64 bits. Funciona para mi configuración particular.


Básicamente, una variante de la respuesta de Matthew Marshall (con struct from the std.library):

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


En mi sistema Centos Linux hice lo siguiente:

1) Inicié el intérprete de Python (estoy usando 2.6.6)
2) Ejecutó el siguiente código:

import platform print(platform.architecture())

y me dio

(64bit, ''ELF'')


Intente usar ctypes para obtener el tamaño de un puntero de vacío:

import ctypes print ctypes.sizeof(ctypes.c_voidp)

Será 4 para 32 bits o 8 para 64 bits.


Notas de platform.architecture() dicen:

Nota: en Mac OS X (y quizás en otras plataformas), los archivos ejecutables pueden ser archivos universales que contienen múltiples arquitecturas.

Para llegar al "64 bits" del intérprete actual, es más confiable consultar el atributo sys.maxsize:

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


Para una solución no programática, busque en el Monitor de actividad. Enumera la arquitectura de los procesos de 64 bits como "Intel (64 bits)".


Plataforma de arquitectura no es la forma confiable. En lugar de nosotros:

$ 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)


struct.calcsize("P") devuelve el tamaño de los bytes necesarios para almacenar un solo puntero. En un sistema de 32 bits, devolvería 4 bytes. En un sistema de 64 bits, devolvería 8 bytes.

Entonces, lo siguiente devolvería 32 si está ejecutando python de 32 bits y 64 si está ejecutando python de 64 bits:

Python 2

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

Python 3

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


Abra la consola de python:

import platform platform.architecture()[0]

debe mostrar los ''64bit'' o ''32bit'' de acuerdo con su plataforma.

Alternativamente ( en el caso de los binarios de OS X ):

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


ACTUALIZADO: Una forma es mirar sys.maxsize como se documenta here :

$ 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 se introdujo en Python 2.6. Si necesita una prueba para sistemas más antiguos, esta prueba un poco más complicada debería funcionar en todas las versiones de Python 2 y 3:

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

Por cierto, puedes estar tentado a usar platform.architecture() para esto. Desafortunadamente, sus resultados no siempre son confiables, particularmente en el caso de los binarios universales de 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


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. >>>

despues de golpear python en cmd


import sys print(sys.version)

3.5.1 (v3.5.1: 37a07cee5969, 6 de diciembre de 2015, 01:54:25) [MSC v.1900 64 bit (AMD64) ]