首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Esky创建.app / .dmg

用Esky创建.app / .dmg
EN

Stack Overflow用户
提问于 2016-06-14 17:31:18
回答 1查看 259关注 0票数 1

我正在用Python开发一个GUI应用程序。我使用cx_Freeze将我的应用程序转换为OS用户的.app/ / .dmg文件。例如,我可以使用python setup.py bdist_dmg使cx_Freeze创建一个用户可以用来安装我的应用程序的.dmg文件。

我现在想让我的应用程序自动更新自己。艾斯基似乎是一个很有希望的框架。我可以做python setup.py bdist_esky来创建一个自我更新的应用程序版本。它产生以下目录结构:

  • myapp
  • myapp-0.1/
    • myapp
    • ..。

  • ..。

顶级myapp是Esky的引导可执行文件。它在当前目录中查找myapp-0.1/作为最新版本,然后启动myapp-0.1/myapp

如何将其打包到.dmg文件中,以便将其发送给我的用户?在我修改了setup.py以使bdist_esky工作之后,bdist_dmg不再工作了。我得到的印象是,Esky根本不适合与bdist_dmg一起使用。它的文档根本没有提到DMG文件,我也没有在谷歌上找到任何东西。

作为第一步,我尝试手动将Esky生成的文件转换为OS .app/包:

  • myapp.app/
    • Contents/
      • Info.plist
      • MacOS/
        • myapp
        • myapp-0.1/
          • myapp
          • ..。

代码语言:javascript
复制
        - ...

Info.plist包含使OS运行myapp所需的最小信息量。然而,当我尝试运行myapp.app时,我得到:

代码语言:javascript
复制
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捆绑包有一些特殊的处理。为了让Esky感到高兴,我尝试重新排列我的文件,以便appdata/确实存在:

  • myapp.app/
    • appdata/
      • myapp-0.1/
        • myapp
        • ..。

代码语言:javascript
复制
- `Contents/` 
    - `Info.plist`
    - `MacOS/` 
        - `myapp`
        - ...

不幸的是,这导致了另一个错误:

代码语言:javascript
复制
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

这真的有那么难吗?我是唯一一个想要使用Esky并以(标准) .dmg格式向用户发送文件的人吗?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 00:31:38

迈克尔,我在github问题上也看到了你的评论。让我在这里回答。

我有相同的需求,并以类似的方式解决,但我认为我没有使用cx_Freeze。另一个不同之处可能是我使用了Python2.7.x。帮助您的最好方法是向您展示一些相关文件,这些文件对于我创建.app和.dmg非常有用。

1) python项目的主要安装文件:esky.py

2)我用来准备一些数据文件等setup.py的实用程序脚本

3)用于创建app和DMG的主shell脚本。也就是说,这个脚本将调用其他所有内容,这是我从命令行直接使用的唯一脚本。esky/package.sh

4)从.app文件创建DMS的dmg-设置脚本.它只是一个简单的包装脚本来调用创建-dmg,一个开放的源代码项目。esky/dmg-设置

请尽量让我知道,如果你有任何其他问题或问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37818567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档