2010-04-02 29 views
18

Recientemente me actualicé a Snow Leopard, y ahora no puedo ejecutar programas creados con wxPython. Los errores que recibo son (de Eclipse + PyDev):WxPython ¿Incompatible con Snow Leopard?

import wx 
    File "/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT/System/Library/Frameworks 
    /Python.framework/Versions/2.6/Extras/lib/ 
    python/wx-2.8-mac-unicode/wx/__init__.py", line 45, in <module> 

    File "/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT 
    /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib 
    /python/wx-2.8-mac-unicode/wx/_core.py", line 4, in <module> 
    ImportError:/System/Library/Frameworks 
    /Python.framework/Versions/2.6/Extras/lib/python 
    /wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture 
    (see "man python" for running in 32-bit mode) 

Realmente no entienden ellos y apreciaría si usted podría ayudar a mí hacerlo, también, si usted sabe lo que está pasando, ¿cómo puede Voy por arreglarlos? ¿Quizás esto tiene algo que ver con el hecho de que Snow Leopard es de 64 bits?

Gracias !!

+2

¿Está pensando en decirnos sus resultados o votar una respuesta? –

Respuesta

25

El problema es que WxPython solo está disponible en la Mac en el modo de 32 bits; sin embargo, de manera predeterminada, Python se iniciará en el modo de 64 bits. Para solucionar este problema, cree el siguiente script de shell llamado python_32:

 
#! /bin/bash 
export VERSIONER_PYTHON_PREFER_32_BIT=yes 
/usr/bin/python "[email protected]" 

Haga el script ejecutable (chmod a+x python_32) y coloque la secuencia de comandos en su camino. Ahora, simplemente invoque python_32 para obtener una consola de Python interactiva en la que pueda usar WxPython. Si desea escribir un script de Python que lo use, puede usar el shebang: #! /usr/bin/env python_32.

Ahora, explicar ... el problema básico es que el código de 32 bits y 64 bits utiliza una interfaz binaria de aplicación diferente (ABI), por lo que el código de 32 bits y el código de 64 bits no pueden coexistir en la misma biblioteca/ejecutable/proceso. Para admitir el modo de 64 bits, debe haber sido compilado en modo de 64 bits; Del mismo modo, para admitir el modo de 32 bits, debe haber sido compilado en modo de 32 bits. En OS X, es posible utilizar binarios universales para admitir ambos ... sin embargo, debe compilarse en ambos modos (y luego fusionarse). WxWidgets probablemente usa Carbon, que solo está disponible en modo de 32 bits (Cocoa está disponible en modo de 32 bits y de 64 bits ... Apple no se molestó en hacer que Carbon estuviera disponible en ambos modos, ya que está en desuso), lo que explicaría por qué WxPython, a su vez, solo podía proporcionarse en modo de 32 bits. Esto, a su vez, significa que usarlo en Python requiere que inicie Python en modo de 32 bits (Python es un binario universal con sus propias versiones de 32 bits y 64 bits disponibles en el mismo archivo binario, por lo que puede ser lanzado en cualquier modo).

Opción Alternativa
No recomiendo hacer esto, porque creo que debe dejar los valores por defecto, ya que son, pero ya que puede que no tenga suficiente conocimiento de secuencias de comandos shell (tiene que utilizar" ./python_32" o colóquelo en una carpeta que se enumera en su variable de entorno "$ PATH" y lo invoque como "python_32") para seguir la primera opción, puede ejecutar simplemente el siguiente comando que hará que el modo de 32 bits sea el predeterminado:

 
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes 

Si decide que desea cambiar de nuevo en modo de 64 bits, a continuación, puede utilizar el siguiente comando:

 
defaults write com.apple.versioner.python Prefer-32-Bit -bool no 

Tenga en cuenta que ambos comandos deben ejecutarse en la Terminal (no dentro de Python).

Fuente
Debo señalar que ambas recomendaciones se basan en man python en Mac OS X. Por lo tanto, si usted tiene cualquier otra pregunta, debería leer la página del manual como el mensaje de error que ha instado a hacer .

+0

Aparece un "comando no encontrado" cuando intento ejecutar python2.6_32 desde la terminal. – Alex

+0

@Alex, necesita crear el script, hacerlo ejecutable y ponerlo en su camino. ¿Has hecho esos pasos? No existe fuera de la caja. –

+0

@Alex, ¿puede decirme qué está escribiendo en la línea de comandos, si ha creado la secuencia de comandos como se indica, dónde está la secuencia de comandos si la ha creado y cuál es el valor de "$ PATH"? –

1

Otra solución es descargar e instalar Python 2.6 para OS X desde python.org e instale wxPython para OS X desde here con él. El Python.org 2.6 es más nuevo (2.6.5 a partir de ahora) que el Python provisto por Apple (2.6.1) en Snow Leopard y solo es de 32 bits.

+0

@Ned, eso es una mala idea ... todo lo que es necesario ya está instalado, y eso eclipsaría la versión de 64 bits. –

+1

Todavía recibo "ninguna arquitectura adecuada de 64 bits" al probar este método – Alex

+0

No, no "eclipsaría" la versión de 64 bits. Está perfectamente bien tener múltiples versiones de Python instaladas en un sistema OS X. Y, como mencioné, existe la ventaja de tener las últimas correcciones en 2.6.5.La clave para usar múltiples versiones es administrar su RUTA de ejecución correctamente. Para usar la versión de python.org de 2.6, asegúrese de que '/ Library/Frameworks/Python.framework/Versions/2.6/bin' llegue antes de'/usr/bin' en $ PATH. El paquete python.org instala un comando de script ('/ Applications/Python 2.6/Update Shell Profile.command') que modificará' .bash_profile' y '.profile' por usted. –

0

Hm. La secuencia de comandos provista no funcionó para mí, la cambié de la siguiente manera:

#! /bin/bash 
echo "-----------------Python 2.6 - 32 Bit setup --------------------" 
echo "Running" $1 
export VERSIONER_PYTHON_PREFER_32_BIT yes 
/usr/bin/python2.6 $1 

Todavía no funcionó. Recibo el mismo mensaje. Vuelva a leer la página del manual para asegurarse de que no era la incomprensión, y yo no soy más hacia adelante:

ImportError: /usr/local/lib/wxPython-unicode-2.8.10.1/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode) 

No es muy seguro por qué esto no funciona, a menos que haya algún tipo de reconstrucción que necesita hacerse contra el núcleo wx que le da compatibilidad con 32/64 bits. Alguna sugerencia, alguien? Me gustaría utilizar el out-of-the-box Python instalación de Apple (más fácil para mi trabajo), y me gustaría evitar cualquier hacks más ridículos

2

También puede ser que desee probar arco comando al invocar Python: arch -i386 /usr/bin/python2.6 si no puede ejecutar Python con la configuración ambiental correcta. El modificador '-i386' hace una ejecución binaria universal en el modo Intel de 32 bits. '-x86_64' lo ejecuta en modo Intel de 64 bits. -ppc y -ppc64 es para arquitecturas PPC.

Si sigues recibiendo errores, entonces podría apuntar a un problema de compilación. En mi máquina tengo el stock apple Python y una versión de Macports. El comando arch funciona con los binarios de apple y puedo importar wx con éxito desde la línea de comandos, pero sigo recibiendo errores del binario de Macports: Bad CPU type in executable. Supongo que tendré que volver y volver a compilar mi binario macthon python y asegurarme de que produce un binario universal o algo así (suspiro).

15

Mientras veo esto ya está contestada, la respuesta es un poco mal. La serie 2.9 tiene una compilación Mac de 64 bits, aunque solo para Python 2.7. Consulte http://wxpython.org/download.php y busque la compilación Cocoa. De lo que encuentro en la lista de correo de wxPython y en el canal de IRC, querrás descargar una compilación de Python de 64 bits de python.org en lugar de usar la serpiente incluida en Mac.

+0

¡Esto hizo que todo me funcionara bien! Definitivamente la solución más fácil a partir de ahora, creo. –

+0

¡Tengo que estar de acuerdo con Mike aquí ya que el instalador de cacao funciona! – okysabeni

Cuestiones relacionadas