如何为OSX创建可接受参数的Python冻结二进制文件?
我用py2app把一个Python脚本做成了一个.app包,但遇到了两个问题:
参数模拟似乎不太正常,因为它不接受在原始Python脚本中有效的参数。
.app包格式需要用“open”命令来打开。而“open”命令只支持从OSX 10.6版本开始传递参数,我需要支持更早的OSX版本。
有什么合适的方法可以制作一个可以接受命令行参数的OSX可执行文件吗?
2 个回答
可以使用 pyinstaller,它可以很简单地为OS X创建类似于Linux的命令行可执行文件。它也可以为Linux和Windows操作系统创建可执行文件。
我用过py2app和pyinstaller来制作OS X的可执行文件,个人觉得pyinstaller更好用,配置起来也更简单。不过,py2app也能处理参数,尽管它是创建应用程序包的。所以你可能只是设置有问题。
一般来说,OS X的应用程序包并不是为了从命令行启动的,也就是说,你不能通过命令行给它传递参数(不过,正如你提到的,OS X 10.6对此有了一些支持)。通常,给应用程序传文件的方式是通过Apple Events,这就像在Finder中用打开
命令打开一个文件,或者把文件拖到Dock中应用程序的图标上。py2app
是为了打包那些像标准Mac图形用户界面应用程序一样使用的应用,特别是通过启动协议和Apple Events接收文件。它并不是为了制作命令行工具。如果你想打包的是命令行工具,可以直接使用普通的Distutils打包方法。或者,如果你的脚本只有一个文件,你可以把它做成一个独立的shebang脚本,具体方法可以参考这里。
另外要注意的是,虽然在OS X上作为一个完整的应用程序运行是使用某些图形界面所必需的,但Python本身在OS X上通常是安装在一个框架中,并且是从框架内的Python.app
包中运行的。(这适用于Apple提供的Python、通过python.org
安装的Python以及通过MacPorts
安装的Python。)当这些框架中的Python运行脚本时,OS X会将它们识别为图形用户界面应用程序,而不需要自己构建应用程序包。