如何在使用py2app打包时包含终端通知程序

时间:2013-10-24 12:15:57

标签: python ruby-on-rails ruby macos py2app

我正在mac osx上的python中创建一个应用程序。我使用py2app从myapp.py python脚本文件和setup.py制作myapp.app。在我的myapp.py代码中,我使用terminal-notifier作为

def notify(title, subtitle, message):
    t = '-title {!r}'.format(title)
    s = '-subtitle {!r}'.format(subtitle)
    m = '-message {!r}'.format(message)
    os.system('terminal-notifier {}'.format(' '.join([m, t, s])))

notify(
    title    = 'Title message',
    subtitle = 'with python',
    message  = 'Validating user'
)

安装为sudo gem install terminal-notifier后显示通知正常。终端通知程序存在于我的系统in location /Library/Ruby中。我的问题是how to include this in py2app for developing my app, as py2app is not able to include terminal-notifier in myapp.app。我的setup.py是

from setuptools import setup

APP=['myapp.py']
DATA_FILES= [('',['config.cfg'])]
OPTIONS={'iconfile':'cc.icns','argv_emulation': True,'plist':{'CFBundleShortVersionString':'1.0'}}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app']
    )   

2 个答案:

答案 0 :(得分:0)

应该可以将脚本作为数据文件包含在内(然后它会在应用程序的'Resources'文件夹中结束,这是应用程序启动时的当前工作目录)

那就是说,我根本没有使用终端通知器的经验,而且对Ruby的经验很少,并且不知道只是复制脚本文件就足以结束工作脚本(由于依赖性)

BTW终端通知程序似乎是向通知中心发送消息的工具:https://github.com/julienXX/terminal-notifier。这也是你可以用PyObjC做的事情。

答案 1 :(得分:0)

我遇到了同样的问题,无法找到完美的解决方案,但是这种解决方法对我来说很有效...

右键单击该应用程序,然后选择“显示包内容”,然后选择“内容”文件夹。在“目录”文件夹中是另一个名为“ MacOS”的文件夹,打开该文件夹并找到您的应用程序的.exe文件。您可以为该.exe创建别名并将其拖到任何位置(例如,桌面或应用程序)。双击您的.exe的别名以启动您的应用,通知将起作用(每次运行exe时,都会打开一个终端窗口)。

正在打包终端通知程序,因为它在您运行exe时可以完美运行,但是由于某些原因,它不适用于通过py2app生成的应用程序!