使用Esky冻结/打包Cocoa PyObjC Python应用程序

时间:2015-06-29 22:01:57

标签: python cocoa pyobjc esky

所以我正在尝试为我的独立OSX Python应用程序组建一个自动更新功能,它是基于PyObjC构建的。只需通过py2app打包它就可以了,但我正在尝试使用Esky将其冻结,以实现更新功能。

据我所知,这是Esky的setup.py格式。我不确定如何告诉Esky将我的.Xib文件的名称传递给py2app。这是我的直接py2app setup.py看起来像,成功包括GUI所需的.Xib文件:

针对Py2app的setup.py

from setuptools import setup

APP = ['MyApp.py']
DATA_FILES = ['MyApp.xib']
OPTIONS = {'argv_emulation': False, 'packages' : ['PIL']}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
    iconfile="MyApp.icns"
)

环顾其他人的帖子,看起来你可以通过略有不同结构的Esky setup.py将设置传递给py2app,但我不能为我的生活找出确切的答案从Esky传递.Xib文件到py2app的参数的结构。

针对Esky的setup.py

from esky import bdist_esky
from distutils.core import setup

setup(name="MyApp",
      version="1.3.3",
      iconfile="MyApp.icns",
      data_files=['MyApp.xib'],
      scripts=["MyApp.py","midheaven.py"],
      options={"bdist_esky":{
      "includes":["PIL"],
      "excludes":['pydoc'],
      "freezer_module": "py2app",
      "freezer_options": {
                "plist": {
                    'argv_emulation': False,
                    'packages': ['PIL'],
                },
                "data_files": ['MyApp.xib'],
            },
      },
      },

     )

所有包都没有错误,但当然如果我尝试运行应用程序的Esky冻结它立即崩溃。我很肯定是因为它没有正确附加.Xib GUI。任何人都有这方面的经验,或有关如何实际格式化的想法?绝对喜欢把这个弄清楚,并把它放在这里为后人。

1 个答案:

答案 0 :(得分:0)

你是正确的esky做了一些不同于你所期望的事情。查看demo / tutorial文件夹是让我走上正确道路的原因。

setup(name="MyApp",
      data_files=[('', ['MyApp.xib']),
                 ('files', ['file1', 'file2']),
                 ('img', glob(r'.\img\*.*'))
                  ]
      ...

所以你有一大堆元组,第一个条目是你的包中包含文件的路径,第二个条目是可放置文件的可迭代文件

您可以删除选项dict中的第二个data_files实例。

更新

尝试

from esky.bdist_esky import Executable

executables = [Executable('example_gui.py', icon='myico.ico', gui_only=True,)]  

setup(
    scripts = executables
    ...