如果您打算分发应用程序,那么python二进制文件的符号链接就不能保证工作,因为通常在开发机器上,系统python不是默认的python,普通用户很可能不会安装Qt和PyQt。
一个更可靠的方法是使用一个本地OSX引导二进制文件来启动PyQt应用程序。py2app和PyInstaller都可以生成本机包装器。虽然py2app对于创建一个别名为的应用程序很有效,即一个包装器,它可以符号链接到系统上的现有文件,使它只绑定所需的PyQt依赖项,但事实证明这并不简单。此外,如果将py2app生成的带有--aliased标志的“别名应用”移动到另一个文件夹,则它将停止工作,因为符号链接是相对于最初运行生成脚本的文件夹的。
PyInstaller安装程序
PyInstaller开箱即用,最后我得到了一个OSX包,其中包含了16MB左右的依赖项。
将python脚本绑定到独立的OSX应用程序:pyinstaller -w --noconfirm -i=myappicon.icns --clean -F myscript.py
这将生成一个独立的捆绑包,在OSX标题栏中以应用程序名的形式显示.setWindowTitle()中的所有内容。-w开关非常重要,因为它将使用正确的.plist文件创建一个MacOS应用程序包。
注意:由于某些原因,通过pip安装的pyinstaller版本对我不起作用。所以我删除了最初的pip版本(pip uninstall pyinstaller),并安装了最新的^{} branch from github,其中:pip install -v -e git+https://github.com/pyinstaller/pyinstaller.git@develop#egg=pyinstaller-github
在那之后,它就像一个符咒。
Mac自动机
创建应用程序包装的另一个选项是使用Automator(在Spotlight中键入名称),转到File>;New>;Application>;搜索并将Run shell script拖到编辑器中,然后在shell下选择bash,python。您还可以使用运行apple script并使用apple脚本引导您的应用程序-如果您需要(例如)询问用户的密码以便以提升的权限运行,这将非常有用。
Automator的一个更好的替代品是Platypus-一个免费的开源应用程序,它将各种类型的脚本打包到OSX应用程序中,并且还提供一些额外的功能,如gui文本输出窗口、以管理员权限运行、设置自定义图标等。这些代码在github上可用。
还可以选择在Xcode中创建一个barebones OSX应用程序,它将启动PyQt脚本(例如here),并执行应用程序所需的其他自定义任务。NOTE: Keep in mind that an app bundle that calls your python code with a predefined interpreter is a 'shallow' app bundle, and will depend on whatever python dependencies you have install locally. Most likely will not work OOTB on someone else's Mac.
努伊特卡
您可能还想尝试Nuitka(^ {CD11>}),它旨在通过将Python代码转换为C++并编译它来构建真正的本地可执行文件。
使用nuitka构建本机应用程序的示例:nuitka3 --follow-imports --python-flag=no_site --verbose --standalone --show-progress --show-modules --output-dir=my_build_dir myscript.py
这将使用my_build_dir文件夹中的库创建mac可执行文件。您需要自己将它们包装在MacOS应用程序包中,例如使用Platypus或Automator。