18

最近、Snow Leopard にアップグレードしたところ、wxPython でビルドされたプログラムを実行できなくなりました。私が得るエラーは(Eclipse + PyDevから)です:

  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)

私はそれらをよく理解していません。また、何が起こっているのか知っている場合、どうすればそれらを修正できますか? これは、Snow Leopard が 64 ビットであることと関係があるのでしょうか?

ありがとう!!

4

6 に答える 6

25

問題は、WxPython が 32 ビット モードの Mac でしか利用できないことです。ただし、デフォルトでは、Python は 64 ビット モードで起動します。この問題を解決するには、次の名前のシェル スクリプトを作成しますpython_32

#! /ビン/バッシュ
エクスポート VERSIONER_PYTHON_PREFER_32_BIT=はい
/usr/bin/python "$@"

スクリプトを実行可能 ( chmod a+x python_32) にして、スクリプトをパスに配置します。ここで、python_32WxPython を使用できるインタラクティブな Python コンソールを取得するために呼び出すだけです。これを使用する Python スクリプトを作成する場合は、shebang: を使用できます#! /usr/bin/env python_32

ここで説明します... 基本的な問題は、32 ビット コードと 64 ビット コードが異なるアプリケーション バイナリ インターフェイス (ABI) を使用するため、32 ビット コードと 64 ビット コードが同じライブラリ/実行可能ファイル/プロセスに共存できないことです。 . 64 ビット モードをサポートするには、64 ビット モードでコンパイルされている必要があります。同様に、32 ビット モードをサポートするには、32 ビット モードでコンパイルされている必要があります。OS X では、ユニバーサル バイナリを使用して両方をサポートすることは可能ですが、両方のモードでコンパイルする (そしてマージする) 必要があります。WxWidgets はおそらく Carbon を使用しますが、これは 32 ビット モードでのみ使用できます (Cocoa は 32 ビット モードと 64 ビット モードの両方で使用できます... Apple は Carbon を両方のモードで使用できるようにすることを気にしませんでした。これにより、WxPython が 32 ビット モードでのみ提供される理由が説明されます。これは、順番に、

代替オプション
デフォルトのままにしておくべきだと思うので、これを行うことはお勧めしませんが、シェルスクリプトの知識が十分でない可能性があるためです(「./python_32」を使用するか、次のフォルダーに配置する必要があります"$PATH" 環境変数にリストされ、それを "python_32" として呼び出す) 前のオプションに従う場合は、次のコマンドを実行して 32 ビット モードをデフォルトにします。

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

64 ビット モードに戻す場合は、次のコマンドを使用できます。

デフォルト書き込み com.apple.versioner.python Prefer-32-Bit -bool no

両方のコマンドが (Python 内ではなく) ターミナルで実行されることに注意してください。

ソースどちらの推奨事項も Mac OS X のman python
に 基づいていることを指摘しておく必要があります。そのため、他に質問がある場合は、エラー メッセージで促されているので、必ず man ページを読む必要があります。

于 2010-04-02T05:59:54.100 に答える
15

これはすでに回答されているようですが、回答は少し間違っています。2.9 シリーズには Mac 64 ビット ビルドがありますが、Python 2.7 のみです。http://wxpython.org/download.phpを参照して、Cocoa ビルドを探してください。私が wxPython メーリング リストと IRC チャネルで収集した情報によると、Mac に含まれるスネークを使用するのではなく、python.org から Python 64 ビット ビルドをダウンロードすることをお勧めします。

于 2010-10-27T19:12:41.397 に答える
2

正しい環境設定で Python を実行できない場合は、python を呼び出すときにarchコマンドを試すこともできます。arch -i386 /usr/bin/python2.6「-i386」スイッチは、ユニバーサル バイナリを Intel 32 ビット モードで実行します。「-x86_64」を指定すると、Intel 64 ビット モードで実行されます。-ppc および -ppc64 は PPC アーキテクチャ用です。

それでもエラーが発生する場合は、コンパイルの問題を示している可能性があります。私のマシンには、標準の Apple Python と Macports のバージョンがあります。arch コマンドは Apple バイナリを使用して動作し、コマンド ラインから wx を正常にインポートできますが、Macports バイナリからまだエラーが発生しBad CPU type in executable ます。Macports Python バイナリに戻って再コンパイルし、生成されることを確認する必要があると思いますユニバーサル バイナリまたはそのようなもの (ため息)。

于 2010-10-11T16:58:45.490 に答える
1

もう1つの解決策は、python.orgからOSX用のPython2.6をダウンロードしてインストールし、ここからOSX用のwxPythonをインストールすることです。python.org 2.6は、Snow LeopardでAppleが提供するPython(2.6.1)よりも新しく(現在は2.6.5)、32ビットのみです。

于 2010-04-02T08:08:14.720 に答える
1

これは私にとってはうまくいきました(http://www.python-forum.de/viewtopic.php?f=19&t=24322&view=previousから)

.profile に、次の行 alias py32='arch -i386 /Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7' を追加します。

次に、py32 でスクリプトを呼び出します

于 2010-10-27T12:41:47.210 に答える
0

うーん。提供されたスクリプトは機能しませんでした。次のように変更しました。

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

それでもうまくいきませんでした。同じメッセージが表示されます。誤解していないことを確認するためにマニュアルページを読み直してください。

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)

32/64 ビットの互換性を与える wx コアに対して実行する必要がある何らかの再構築がない限り、これが機能しない理由はよくわかりません。何か提案はありますか?Apple のすぐに使用できる Python インストールを使用したい (作業が簡単になるようにするため)、これ以上ばかげたハッキン​​グを避けたい

于 2010-04-05T05:21:09.240 に答える