2

PyObjCを使用していくつかの簡単なアプリケーションの開発を始めたいと思います。PyObjCとXcodeテンプレートをインストールしました。このスクリプトを正常に実行したので、PyObjC自体が機能することを知っています。Cocoa-Pythonアプリケーションテンプレートからプロジェクトを作成して実行しようとすると、次のエラーが発生しました。

トレースバック(最後の最後の呼び出し):
  ファイル"main.py"、行10、
    objcをインポートする
  ファイル"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/__init__.py"、25行目
    _convenienceimport*から
  ファイル"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/_convenience.py"、21行目
    itertoolsからインポートimap
ImportError:dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so、2):適切なイメージが見つかりません。見つけました:
    /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so:mach-o、しかし間違ったアーキテクチャ
2010-02-08 19:40:09.280 TestApplication [3229:a0f]***キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:'/Users/icktoofay/Desktop/TestApplication/main.m:44 main()PyRun_SimpleFileファイル'/Users/icktoofay/Desktop/TestApplication/build/Debug/TestApplication.app/Contents/Resources/main.py'で失敗しました。エラーについてはコンソールを参照してください。

通常のPythonプロンプトを開いてインポートしようとしたところitertools、エラーは発生しませんでした。Mac OS X 10.6SnowLeopardのMacPortsからPython2.6.4を使用しています。

助けていただければ幸いです。

4

1 に答える 1

3

32ビットと64ビットの問題があります。MacPortsからインストールされたPython2.6を使用しているようですが、ユニバーサル(32ビット/ 64ビット)ビルドではなかったようです。アプリが64ビットで実行されていて、Pythonが32ビットのみであるかその逆のいずれかです。以下を使用して確認できますfile

cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6/
cd lib/python2.6/lib-dynload/
file itertools.so 
itertools.so: Mach-O universal binary with 2 architectures
itertools.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
itertools.so (for architecture i386):   Mach-O bundle i386

最も簡単な修正は、MacPortsPythonとPyObjCのようにインストールした追加パッケージを再インストールすることです。

sudo port selfupdate
sudo port -u install python26 +universal ...

編集:Pythonが64ビットであると報告しているので、問題はほぼ確実にPythonPyObjCプロジェクトのXcodeテンプレート設定の問題が原因です。スタートアップコードは、おそらくユニバーサルであるApple提供のPythonインタプリタをロードしています。:の前に次のようなものを追加することで確認できますimport objc

import sys
sys.stderr.write(sys.executable)

MacPortsの場合は、

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python

Xcodeでテンプレートを使用して何を変更する必要があるかを理解するのに十分な知識がなく、特に10.6未満で多くの人がMacPortsPythonでテンプレートを使用しているとは思えません。

別の考えとして、Appleが提供するPython 2.6.1には、すでにインストールされているバージョンのPyObjCが付属しています。おそらくそれを使用する方が簡単でしょう。または、Xcodeを使用せず、py2appまたは別のソリューションを使用して実行します。

于 2010-02-09T05:43:41.047 に答える