2010-01-18 14 views
36

Cuando ejecuto el siguiente desde una fiesta en mi Mac:¿Cómo fuerzo Python para ser de 32 bits en Snow Leopard y otras preguntas de 32 bits/64 bits

$ file /usr/bin/python 

me sale el siguiente tres líneas:

/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 

esto parecería indicar que Python ha sido compilado para las tres arquitecturas o algo así? Creo que, en base a algunos errores que tuve al intentar configurar MySQL, la versión que estoy usando es la de 64 bits. Entonces dos preguntas:

  1. ¿Cómo lo habría sabido?

  2. ¿Cómo podría cambiar Python en lugar de 32 bits? ¿Algo menos drástico que volver a compilar con diferentes configuraciones de compilación?

  3. ¿Por qué arch de un retorno cáscara del golpe i386 lo que parece indicar que no estoy en "modo de 64 bits" cuando sé basado en mi procesador Estoy corriendo una de 64 bits de Mac?

Lo sentimos Estos son probablemente todas las preguntas de novato, todo el asunto 32/64 bits es frustrante a la mierda de mí y estoy seguro de que hay algunos comandos/herramientas que harían más fácil.

Respuesta

30
  1. Usted puede descubrir mucho acerca de la versión de Python que se está ejecutando a través del módulo platform (el módulo sys también tiene algunos ayudantes simples)

  2. En Mac OS X, puede ejecutar un "binario grueso" con su arquitectura elegida con, por ejemplo,

    arco -i386/usr/bin/python

hago no recomiendan que altera/usr/lib/python sí mismo (con el comando lipo) - se puede hacer fácilmente su sistema inutilizable por la manipulación archivos de sistema. Tal vez la instalación de un Python separado de python.org (para fines de aplicaciones) mientras se abandona el sistema Python solo es una estrategia aceptable para usted. ¡Definitivamente es más seguro que alterar archivos del sistema! -)

En cuanto a su tercera pregunta, hmmm, este es un gran problema para mí, y definitivamente una pregunta para superusuario.com (además de no estar relacionado con Python, tampoco parece estar relacionado con la programación ;-).

+24

Si bien 'arch -i386 filename' generalmente hará lo correcto, en 10.6' arch -i386/usr/bin/python' seguirá ejecutando Python en modo de 64 bits (si es posible). Utilice "export VERSIONER_PYTHON_PREFER_32_BIT = yes" (consulte "man 1 python" de Apple) o "arch -i386/usr/bin/python2.6". –

+7

Tenga en cuenta que la variable de entorno VERSIONER_PYTHON_PREFER_32_BIT es una característica de Python 2.6 suministrada por Apple en OS X 10.6 ('/ usr/bin/python'). No tiene efecto en otras Pythons como las instaladas por los instaladores de python.org. –

+1

Hola gente, he creado mi distribución de python desde la fuente usando el proyecto de administrador de paquetes Homebrew (sus líneas de etiqueta hacen reír, "¿MacPorts te lleva a beber? ¡Prueba Homebrew!"). El VERSIONER_PYTHON_PREFER_32_BIT me parece para el pitón suministrado por Apply, ¿hay alguna forma de jugar el mismo truco con una distribución de pitón personalizada? Realmente no quiero alias 'arch -i386 python' a python. –

19

Arreglo para el uso con virtualenv en Snow Leopard

respuesta de danielrsmith funciona para mí cuando no estoy usando virtualenv, pero virtualenv hace una copia del ejecutable pitón lo que provoca que no funcione:

$ which python 
/Users/cogg/.virtualenvs/tweakeats/bin/python 

$ python 
[...] 
>>> import sys 
>>> sys.maxint 
9223372036854775807 

porque esta es una copia de python, utilicé lipo para eliminar la arquitectura de 64 bits.Esto me permite usar 32 bits de Pitón 2.6 con virtualenv:

$ lipo -info /Users/cogg/.virtualenvs/tweakeats/bin/python 
Architectures in the fat file: /Users/cogg/.virtualenvs/tweakeats/bin/python are: x86_64 i386 ppc7400 
$ mv /Users/cogg/.virtualenvs/tweakeats/bin/python /Users/cogg/.virtualenvs/tweakeats/bin/python.old 
$ lipo -remove x86_64 /Users/cogg/.virtualenvs/tweakeats/bin/python.old -output /Users/cogg/.virtualenvs/tweakeats/bin/python 
$ python 
[...] 
>>> import sys 
>>> sys.maxint 
2147483647 
+1

MUCHAS GRACIAS. Estaba a punto de llorar tratando de encontrar una solución después de perder psycopg2. –

+0

¿por qué la copia VE de Python no respeta la variable de entorno? – rbp

6

La respuesta ha sido aceptada. Pero creo que la tercera pregunta sigue sin respuesta. Encontré que era una pregunta interesante y también hice algunas investigaciones para la misma. Esta es la respuesta que encontré en otro foro de SO:

SnowLeopard ejecuta software y aplicaciones de sistema de 32 bits en máquinas Intel de 32 bits y software de sistema de 64 bits y aplicaciones de 32 y 64 bits en 64 máquinas Intel de bits. La versión de escritorio de Snow Leopard arranca un kernel de 32 bits por razones de compatibilidad con el controlador y kext, pero todo el espacio de usuario se ejecuta en 64 bits. Mac OS X Server se inicia en un kernel de 64 bits. Core 2 Duo es una máquina de 64 bits. Pruebe $ sysctl hw.cpu64bit_capable o sysctl hw.optional.x86_64 para verificar que tiene una CPU de 64 bits. arch siempre mostrará i386 en hardware Intel tanto en Leopard como en Snow Leopard. - cdespinosa Sep '09 al 22 de 4:23

original enlace - Mac OSX 10.6 compiler: a puzzling experience with 32 vs 64 bit

0

la tercera cuestión tiene que ver con el núcleo de 32/64 bits

sólo porque usted tiene un sistema operativo de 64 bits capaz y el procesador CPU capaz de 64 bits no significa que va a iniciar un kernel de 64 bits en Mac OS X

Si tienes un Mac con 10,6 leopardo de las nieves en él desde la fábrica, entonces es enviado en el modo de 32 bits de forma predeterminada

tendría que editar la configuración del sistema para iniciar el modo de 64 bits

(no estoy seguro de los cambios a 10.7 o 10.8 ya que el último que uso es nieve leo pero creo que pueden arrancar kernel de 64 bits de fábrica)

10.6 - desde el terminal ejecuta el comando:

:*sudo nvram boot-args="arch=x86_64" 

O

10.6 - desde el terminal ejecute el comando:

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.Boot 'Kernel Flags' 'arch=x86_64' 
0

He intentado muchas maneras diferentes de ejecutar el script de prueba Skype4Py usando,

arch -i386 

lo que funcionó en el final estaba mirando el camino de violación de segmento para la versión de 64 bits reclamada de pitón y poner eso en mi cabecera file: #!/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python

Después de poner esta línea en la parte superior y agregar permisos de ejecución a mi archivo , Podría usar, arch -i386 skype.py

Y se ejecutará sin problema.

0

Después de una gran cantidad de ensayo y error a mí mismo de probar algunas de las sugerencias anteriores, yo nos topamos con el siguiente enlace simbólico:

/usr/local/bin/python2-32 

señalando:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-32 

Y observo que cuando Ejecuto este Python, se inicia en modo de 32 bits (en contraste con /Library/Frameworks/Python.framework/Versions/2.7/bin/python2). Esto se puede observar en Activity Monitor.

Nota: como han señalado otros, platform.architecture() no siempre es un buen indicador. Está mostrando '64-bit 'para este proceso de 32 bits.

Cuestiones relacionadas