我有一个中型 PyQT5 桌面应用程序,它在 py2app 上运行良好。我想合并 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 包含该语句from helloform import Form
——这似乎是导致应用程序无法以错误“HelloApp 错误”启动的原因,好像我删除了该语句并粘贴了应用程序启动的 helloform/ init .py 的内容并正常工作。
另外,如果我将所有内容移到一个目录中并调整 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 文档或网络上的各种示例中找到答案。
/var/log/system.log 的完整错误是:
2014-06-03 13:03:07.100 HelloApp[14968]: HelloApp Error
我假设我没有includes
在 setup.py 中正确使用 Esky 的选项,但我不知道如何解决这个问题——谁能帮忙?
其他可能相关的详细信息:MacOS X 10.9 Mavericks、Python 2.7.6(本地构建)、qt-5.3.0 开源、sip 4.16、PyQT 5.3.0 (GPL)、py2app 0.8.1修补以支持 PyQT5和最新版本来自 GitHub 的 Esky。
提前致谢!