2010-08-31 9 views
12

Estoy ejecutando Python 2.7 bajo Mac OS 10.6.4, y acabo de instalar wxPython desde el binario wxPython2.8-osx-unicode-2.8.11.0-universal-py2.7.dmg. Estoy obteniendo un error extraño en la línea import wx en mis scripts de Python. FYI, puedo importar el módulo wx de PyCrust. Realmente no veo lo que he hecho mal aquí. ¿Podría alguien ayudarme?problema de "no coincidencia de la arquitectura en el contenedor universal" en wxPython?

File "prod_cons_wx.py", line 6, in <module> 
    import wx 
    File "/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/__init__.py", line 45, in <module> 
    from wx._core import * 
    File "/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core.py", line 4, in <module> 
    import _core_ 
ImportError: dlopen(/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so, 2): no suitable image found. Did find: 
    /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no matching architecture in universal wrapper 
+1

Parece haber una solución más actualizada a este problema [aquí] (http://stackoverflow.com/questions/9205317/how-do-i-install-wxpython-on-mac-os- X). – senderle

Respuesta

9

Parece que los módulos de extensión C incluidos con el wxPython 2.7 dmg here son solo de 32 bits.

$ cd /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx 
$ file *.so 
_animate.so: Mach-O universal binary with 2 architectures 
_animate.so (for architecture ppc): Mach-O bundle ppc 
_animate.so (for architecture i386): Mach-O bundle i386 
_aui.so:  Mach-O universal binary with 2 architectures 
_aui.so (for architecture ppc): Mach-O bundle ppc 
_aui.so (for architecture i386): Mach-O bundle i386 
... 

Desafortunadamente, platform.architecture() no da una indicación precisa de los cuales arco una arquitectura múltiple OS X Python se ejecuta en. Por ejemplo, utilizando la python.org instalador 3-arch para Python 2.7, platform.architecture() informa siempre 64- poco, incluso cuando se ejecuta en modo de 32 bits:

$ cd /Library/Frameworks/Python.framework/Versions/2.7 
$ file python2.7 
python2.7: Mach-O universal binary with 3 architectures 
python2.7 (for architecture i386): Mach-O executable i386 
python2.7 (for architecture ppc7400): Mach-O executable ppc 
python2.7 (for architecture x86_64): Mach-O 64-bit executable x86_64 
$ arch -x86_64 ./python2.7 -c 'import platform, sys; print "{0}, {1:x}".format(platform.architecture()[0], sys.maxint)' 
64bit, 7fffffffffffffff 
$ arch -i386 ./python2.7 -c 'import platform, sys; print "{0}, {1:x}".format(platform.architecture()[0], sys.maxint)' 
64bit, 7fffffff 
$ arch -ppc ./python2.7 -c 'import platform, sys; print "{0}, {1:x}".format(platform.architecture()[0], sys.maxint)' 
64bit, 7fffffff 

La forma más fiable es examinar sys.maxint para Python 2 o sys.maxsize para Python 3.

no se indica en tu pregunta de cómo invocas a Python. ¿Es a través de una línea shebang en un archivo de script? Si es así, puede que no estés ejecutando el Python que crees que eres. Además, no indica qué Python 2.7 ha instalado. Por ejemplo, actualmente hay dos instaladores para Python 2.7 de python.org: uno admite la ejecución de 32 y de 64 bits, el otro solo de 32 bits. Pruebe lo siguiente:

$ file $(python2.7 -c 'import sys;print(sys.executable)') 
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: Mach-O universal binary with 3 architectures 
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (for architecture i386): Mach-O executable i386 
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (for architecture ppc7400): Mach-O executable ppc 
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (for architecture x86_64): Mach-O 64-bit executable x86_64 

Por lo tanto: si tiene una versión multi-arco de Python, tendrá que forzar para que se ejecute en modo de 32 bits para hacer uso de la wxPython precompilado.

+0

Estoy ejecutando el script de python desde una ventana de terminal normal, es decir, '$ python script.py'. La importación se realiza de forma regular, justo al comienzo del script. Imprimir sys.maxint da 9223372036854775807, así que supongo que me estoy ejecutando en modo de 64 bits. Esto es lo que obtengo cuando intento el último bit: ../Python: Mach-O binario universal con 3 arquitecturas ../Python (para arquitectura i386): \t ejecutable Mach-O i386 ../Python (para arquitectura ppc7400) Mach-O ejecutable ppc ../Python (para la arquitectura x86_64): Mach-O 64-bit ejecutable x86_64 – c00kiemonster

+0

Acabo de comprobar el otro mac donde wxPython funciona bien, sys.maxint muestra que se está ejecutando 32 bits. ¿Cómo puedo forzar a Python a ejecutar el modo de 32 bits? – c00kiemonster

+7

Debería poder usar 'arch -i386 python2.7 script.py' para ejecutar en modo de 32 bits. Si eso resulta ser problemático y no necesita funciones de 64 bits, puede descargar e instalar el otro instalador de python.org 2.7 (el marcado con 10.3 y superior). Eso sobrescribirá su instalación existente de python2.7 con solo una de 32 bits. Es posible que deba volver a instalar el wxPython después. –

0

¿Cómo instaló python en Snow Leopard OSX (10.6) Series? ¿Tu python está compilado para 64 o 32 bits?

Trata de hacer lo siguiente:

import platform 
print platform.architecture() 

Comprobar si el binario (wxpython dmg) fue compilada para 32 o 64 bits. Es posible que tenga que buscar un paquete que sea compatible con su arquitectura o que deba compilar desde el origen en su máquina.

Le sugiero que utilice macports.

  1. instalar macports de macport.org
  2. sudo/opt// bin/puerto local instalar python27
  3. sudo/opt// bin/puerto local instalar python_select
  4. sudo/opt/local/python_select python27
  5. sudo/opt/local/bin/puerto instalar py27-wxpython

y esto debe trabajar para usted!

+0

Parece que tengo Python 32 bit instalado. Los binarios mac wxPython no dicen nada sobre 32 vs 64 bit. Pero lo extraño es que wxPython funciona bien en mi otro Mac, con un sistema e instalación idénticos. Solo esta una computadora en particular está levantando una pelusa. – c00kiemonster

+0

Simplemente compruebe la arquitectura en el otro mac. Sugeriría usar los macports. Funciona bien ya que python y wxpython están compilados en su máquina. ¡También con esto, puedes cambiar de python26, 27 y 3! – pyfunc

+0

Lo extraño es que ambos son iguales, es decir, 32 bit. Tal vez debería darle macports una oportunidad entonces. – c00kiemonster

4

Solo para aclarar la sugerencia de 'Ned Deily's': use arch -i386 python2.7 script.py para ejecutar en modo de 32 bits. La línea de comando exacta es arch -i386 python pywrap spare.py. Esto le permitirá ejecutar PyCrust (en modo de 32 bits en OSX 10.6.x).

2

Hay dos archivos para el sistema de 32 bits, python2.7-32 y pythonw2.7-32. Puede usar estos dos archivos para ejecutar su secuencia de comandos.

I enlace python al python2.7-32 y enlace pythonw al pythonw2.7-32. Mis scripts funcionan bien.

lo puedes probar.

Cuestiones relacionadas