我使用 py2app 从 python 脚本制作了一个 .app 包。这个问题是双重的:
参数仿真似乎无法正常工作,因为它不接受适用于原始 python 脚本的参数。
.app bundle 格式需要用“open”打开。“open”仅支持从 OSX 10.6 及更高版本传递参数,我需要支持早期 OSX 版本。
为 OSX 制作可以接受命令行参数的冻结二进制文件的正确方法是什么?
通常,OS X 应用程序包并非设计为从命令行启动并从命令行传递参数(正如您所注意到的,OS X 10.6 对此添加了一些支持)。将文件传递给应用程序的标准机制是通过Apple Events;这用于 Finder 对Open
具有应用程序处理类型的文档文件的命令,或者当文件被拖放到 Dock 中的应用程序图标上时。 py2app
旨在打包将像标准 Mac GUI 应用程序一样使用的应用程序,特别是使用启动协议和通过 Apple 事件接收文件。它不是为生成命令行实用程序而设计的。如果后者是你要打包的,只需使用普通的Distutils 打包方法. 或者,如果您的脚本仅包含一个文件,您可以将其设为独立的 shebang 脚本,如此处所述。
另请注意,虽然在 OS X 上作为成熟的应用程序运行是使用某些 GUI 界面所必需的,但 OS X 上的 Python 本身通常安装在框架中,并从安装在框架内的Python.app
包中运行。(这适用于 Apple 提供的 Python、安装程序安装的 Pythonpython.org
和MacPorts
已安装的 Python。)当脚本由这些框架Python 之一运行时,OS X 将它们识别为 GUI 应用程序,而无需构建自己的应用程序包.
使用pyinstaller,它可以轻松地为 OS X 创建类似于 linux 的命令行二进制可执行文件。它也可以为 linux 和 Windows 操作系统创建。
我已经使用 py2app 和 pyinstaller 来执行 OS X 可执行文件,对我来说 pyinstaller 更好,更容易配置。然而 py2app 也可以处理参数,即使它创建应用程序包。所以认为你只是错误的建筑设置。