我正在使用Python开发GUI应用程序。我使用cx_Freeze
将我的应用转换为OS X用户的.app/
/ .dmg
个文件。因此,例如,我可以使用python setup.py bdist_dmg
使cx_Freeze创建一个.dmg
文件,我的用户可以使用该文件来安装我的应用。
我现在希望我的应用自动更新。 Esky似乎是一个很有前途的框架。我可以python setup.py bdist_esky
创建我自己更新的应用版本。它产生以下目录结构:
myapp
myapp-0.1/
myapp
顶级myapp
是Esky的bootstrapping可执行文件。它在当前目录中查找,找到myapp-0.1/
作为最新版本,然后启动myapp-0.1/myapp
。
如何将其打包到.dmg
文件中,我可以将其发送给我的用户?在我修改setup.py
以使bdist_esky
生效后,bdist_dmg
不再有效。我得到的印象是,Esky根本不适合与bdist_dmg
一起使用。它的文档根本没有提到DMG
文件,我也在Google上找不到任何内容。
作为第一步,我尝试手动将Esky生成的文件转换为OS X .app/
包:
myapp.app/
Contents/
Info.plist
MacOS/
myapp
myapp-0.1/
myapp
Info.plist
包含使OS X运行myapp
所需的最少量必要信息。当我尝试运行myapp.app
时,我得到:
Traceback (most recent call last):
File "<string>", line 318, in bootstrap
File "<string>", line 442, in get_best_version
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/Temp/myapp.app/appdata'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 689, in <module>
File "<string>", line 335, in bootstrap
RuntimeError: no usable frozen versions were found
查看Esky的源代码,似乎在其appdir_from_executable(...)
函数中对OS X包进行了一些特殊处理。为了让Esky高兴,我尝试重新安排我的文件,以便appdata/
实际存在:
myapp.app/
appdata/
myapp-0.1/
myapp
Contents/
Info.plist
MacOS/
myapp
不幸的是,这会导致另一个错误:
Traceback (most recent call last):
File "<string>", line 689, in <module>
File "<string>", line 336, in bootstrap
File "<string>", line 363, in chainload
File "<string>", line 425, in _chainload
UnboundLocalError: local variable 'exc_value' referenced before assignment
这真的很难吗?我是唯一一个想要以(标准).dmg
格式向用户提供Esky 和的文件吗?我错过了什么?
答案 0 :(得分:1)
我有相同的要求并以类似的方式解决但我认为我没有使用cx_Freeze。另一个区别可能是我使用的是Python 2.7.x.帮助您的最佳方法是向您展示一些适合我创建.app和.dmg的相关文件。
1)python项目的主要设置文件: https://dl.dropboxusercontent.com/u/13110611/temp/package_esky/setup_esky.py
2)我用来准备一些数据文件等的实用程序脚本 https://dl.dropboxusercontent.com/u/13110611/temp/package_esky/prepare_setup.py
3)我用来创建app和DMG的主shell脚本。也就是说,这个脚本将调用其他所有内容,它是我从命令行直接使用的唯一脚本。 https://dl.dropboxusercontent.com/u/13110611/temp/package_esky/package.sh
4)dmg-setup脚本将从.app文件创建DMS。它只是一个简单的包装脚本来调用create-dmg,一个开放的源项目。 https://dl.dropboxusercontent.com/u/13110611/temp/package_esky/dmg-setup
如果您有任何其他问题或疑问,请尝试告诉我。