2010-08-31 25 views
12

Tôi đang chạy Python 2.7 trong Mac OS 10.6.4 và tôi vừa cài đặt wxPython từ mã nhị phân wxPython2.8-osx-unicode-2.8.11.0-universal-py2.7.dmg. Tôi nhận được một lỗi lạ trên dòng import wx trong các kịch bản Python của tôi. FYI, tôi có thể nhập khẩu các mô-đun wx tốt từ PyCrust. Tôi không thực sự thấy những gì tôi đã làm sai ở đây. Bất cứ ai có thể vui lòng hỗ trợ?"không phù hợp với kiến ​​trúc trong phổ wrapper" vấn đề trong 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

Dường như có giải pháp cập nhật hơn cho vấn đề này [ở đây] (http://stackoverflow.com/questions/9205317/how-do-i-install-wxpython-on-mac-os- x). – senderle

Trả lời

9

Có vẻ như các mô-đun mở rộng C đi kèm với wxPython 2.7 dmg here chỉ là 32 bit.

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

Thật không may, platform.architecture() không đưa ra một dấu hiệu cho thấy chính xác trong đó uốn cong một nhiều kiến ​​trúc OS X Python đang chạy trong. Ví dụ, bằng cách sử dụng cài đặt python.org 3 vòm cho Python 2.7, platform.architecture() luôn báo cáo 64 chút, ngay cả khi chạy ở chế độ 32-bit:

$ 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 

cách đáng tin cậy là để kiểm tra sys.maxint cho Python 2 hoặc sys.maxsize cho Python 3.

Bạn không nêu rõ trong câu hỏi của bạn như thế nào bạn gọi Python. Là nó thông qua một dòng shebang trong một tập lệnh? Nếu vậy, bạn có thể không chạy Python mà bạn nghĩ bạn đang sử dụng. Ngoài ra, bạn không chỉ ra Python 2.7 nào bạn đã cài đặt. Ví dụ, hiện tại có hai trình cài đặt cho Python 2.7 từ python.org: một trình hỗ trợ cả thực thi 32 và 64 bit, cái còn lại chỉ là 32-bit. Hãy thử như sau:

$ 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 

Vì vậy: nếu bạn có một phiên bản đa vòm của Python, bạn sẽ cần phải buộc nó để chạy ở chế độ 32-bit để tận dụng các wxPython tiền biên dịch.

+0

Tôi đang chạy tập lệnh python từ cửa sổ đầu cuối thông thường, ví dụ: '$ python script.py'. Quá trình nhập được thực hiện theo cách thông thường, ngay ở đầu tập lệnh. In sys.maxint cho 9223372036854775807 vì vậy tôi đoán tôi đang chạy ở chế độ 64 bit. Đây là những gì tôi nhận được khi tôi thử bit cuối cùng: ../Python: Mach-O phổ nhị phân với 3 kiến ​​trúc ../Python (đối với kiến ​​trúc i386): \t Mach-O thực thi i386 ../Python (cho kiến trúc ppc7400) Mach-O thực thi ppc ../Python (cho kiến ​​trúc x86_64): Mach-O 64-bit thực thi x86_64 – c00kiemonster

+0

Tôi vừa kiểm tra các mac khác, nơi wxPython làm việc tốt, sys.maxint cho thấy rằng nó đang chạy 32 bit. Làm thế nào tôi có thể buộc python để chạy chế độ 32 bit? – c00kiemonster

+7

Bạn có thể sử dụng 'arch -i386 python2.7 script.py' để chạy ở chế độ 32 bit. Nếu điều đó chứng tỏ là phiền phức và bạn không cần các tính năng 64 bit, bạn có thể tải xuống và cài đặt trình cài đặt python.org 2.7 khác (trình được đánh dấu 10.3 trở lên). Điều đó sẽ ghi đè lên cài đặt python2.7 hiện có của bạn chỉ với một phiên bản 32 bit. Bạn có thể cần phải cài đặt lại wxPython sau đó. –

0

Bạn đã cài đặt python trên Snow Leopard OSX (10.6) Series như thế nào? Con trăn của bạn được biên dịch cho 64 bit hoặc 32 bit.

Hãy thử làm như sau:

import platform 
print platform.architecture() 

Check-out nếu nhị phân (wxPython dmg) đã được biên soạn cho 32 hoặc 64 bit. Bạn có thể phải tìm một gói tương thích với kiến ​​trúc của mình hoặc bạn có thể phải biên dịch từ nguồn trên máy của mình.

Tôi khuyên bạn nên sử dụng macports.

  1. cài đặt macports từ macport.org
  2. sudo/opt/local/bin/cổng cài đặt python27
  3. sudo/opt/local/bin/cổng cài đặt python_select
  4. sudo/opt/local/python_select python27
  5. sudo/opt/local/bin/cổng cài đặt py27-wxPython

và điều này sẽ làm việc cho bạn!

+0

Tôi dường như đã cài đặt Python 32 bit. Các wxPython mac nhị phân không nói bất cứ điều gì về 32 vs 64 bit. Nhưng điều kỳ lạ là wxPython chạy tốt trên mac khác của tôi, với hệ thống giống hệt nhau và cài đặt. Chỉ có một máy tính cụ thể này đang khởi động một fuzz. – c00kiemonster

+0

Chỉ cần kiểm tra kiến ​​trúc trên máy Mac khác. Tôi sẽ đề xuất sử dụng các macports. Nó hoạt động tốt như cả python và wxpython được biên dịch trên máy tính của bạn. Ngoài ra, bạn có thể chuyển từ python26, 27 và 3! – pyfunc

+0

Điều kỳ lạ là chúng đều giống nhau, tức là 32 bit. Có lẽ tôi nên cho macports một đi sau đó. – c00kiemonster

4

Chỉ cần làm rõ đề xuất 'Ned Deily': sử dụng arch -i386 python2.7 script.py để chạy ở chế độ 32 bit. Dòng lệnh chính xác là arch -i386 python pywrap spare.py. Điều này sẽ cho phép bạn chạy PyCrust (ở chế độ 32 bit trên OSX 10.6.x).

2

Có hai tệp cho hệ thống 32 bit, python2.7-32 và pythonw2.7-32. Bạn có thể sử dụng hai tệp này để chạy tập lệnh của mình.

Tôi liên kết python với python2.7-32 và liên kết pythonw với pythonw2.7-32. Tất cả các tập lệnh của tôi đều hoạt động tốt.

bạn có thể thử.

Các vấn đề liên quan