py2app で正常に動作している中規模の PyQT5 デスクトップ アプリケーションがあります。アプリが自分自身を更新できるように Esky を組み込みたいのですが、起動時に (メイン ウィンドウを表示する前に) アプリが終了し、"HelloApp エラー" というログ エントリが表示されます ("HelloApp" はアプリケーションの名前です)。
https://github.com/markmont/esky-package-questionで入手できる問題を再現する小さなテスト ケースを作成しました。
テスト ケース アプリの構造は次のとおりです。
HelloApp/
HelloApp/
HelloApp.py
helloform
__init__.py
setup.py
setup.py には以下が含まれます。
from esky import bdist_esky
from distutils.core import setup
PY2APP_OPTIONS = {
'argv_emulation': True,
'includes': [ 'sip', 'PyQt5', 'helloform' ],
'qt_plugins': [ '*' ]
}
ESKY_OPTIONS = {
"freezer_module": "py2app",
"freezer_options": PY2APP_OPTIONS,
"includes": [ 'sip', 'PyQt5', 'helloform' ]
}
HelloApp = bdist_esky.Executable( "HelloApp/HelloApp.py", gui_only=True )
setup(
name='HelloApp',
version = "2014060301",
data_files=[],
options = { "bdist_esky": ESKY_OPTIONS },
scripts=[ HelloApp ]
)
HelloApp.py にはステートメントが含まれています。これが、アプリケーションが起動するステートメントを削除して helloform/ init .py のfrom helloform import Form内容に貼り付けたかのように、「HelloApp エラー」というエラーでアプリの起動に失敗する原因のようです。正しく動作します。
また、すべてを単一のディレクトリに移動し、setup.py のパスを調整すると、問題は発生しません。Esky が helloform.py (以前は helloform/ init .py という名前) を見つけてインクルードし、アプリケーションが起動します。そして正しく動作します:
HelloApp/
HelloApp.py
helloform.py # formerly ./HelloApp/helloform/__init__.py
setup.py
...しかし、すべてを単一のディレクトリに配置することは、中規模から大規模のアプリケーションにとってスケーラブルなソリューションではありません。
問題が発生したときの出力にエラー メッセージはありませpython setup.py bdist_eskyん。また、Esky のドキュメントや Web 上のさまざまな例で答えを見つけることができませんでした。
/var/log/system.log からの完全なエラーは次のとおりです。
2014-06-03 13:03:07.100 HelloApp[14968]: HelloApp Error
setup.py でEsky のincludesオプションを適切に使用していないと思いますが、これを修正する方法についての手がかりがありません。誰か助けてもらえますか?
その他の関連する可能性のある詳細: MacOS X 10.9 Mavericks、Python 2.7.6 (ローカル ビルド)、qt-5.3.0 オープンソース、sip 4.16、PyQT 5.3.0 (GPL)、PyQT5をサポートするようにパッチが適用されたpy2app 0.8.1 、および最新バージョンGitHub からの Esky の。
前もって感謝します!