好的,我想通了。由于在 mac 上从头开始构建 app bundle 有点棘手,所以最好找到一个可以为您构建它的程序,我使用 applescript 来完成。
首先,您需要构建来自 python 代码的可执行文件。我将 pyinstaller 与 --onefile 选项一起使用。所以要构建您的可执行文件,请使用以下命令:
$pyinstaller --onefile yourPythonProgramYouWantToBuild.py
构建完成后,双击文件或使用终端打开它以检查它是否有效,是否已包含来自各种库的所有必需代码等。如果有效,则进入下一步。
打开applescript并设置一个新脚本。
这就是我如何让这件事发挥作用的方法
1)applescript获取它所在的目录
2)编译的可执行文件将(手动)放置在应用程序包中,应用程序内的脚本将知道它在应用程序包中的位置
3) 脚本找到可执行文件的确切路径,并告诉终端应用程序运行它
好的,那该怎么做呢?
制作一个新的applescript,然后在里面放一些虚拟代码,例如:
display dialog "Hello, world!"
接下来,将此 applescript 保存为 app bundle。进入您刚刚制作的新应用程序包并在应用程序包内容Contents->Resources->Scripts->main.scpt内导航。现在打开 main.scpt 文件并开始编辑它。
在你的main.scpt中,先找到applescript所在的目录
tell application "Finder"
set current_path to container of (path to me) as string
end tell
但是,如果您在 Apple 脚本中输入 display dialog current_path,当您从 app bundle 运行它时,您会发现它不会一直带您进入 app bundle。例如,如果您从桌面运行应用程序,您将获得的路径类似于~/Desktop/,这不是我们想要的,因为我们需要获取应用程序内部的路径。因此,接下来我们需要在其末尾附加一些内容,以便获取 app bundle 中的好内容。使用类似这样的命令:
set current_path to current_path & "TheNameOfThe.app" & ":" & "theNameOfYourCompiledExecutable"
现在我们有了(可能)在您的应用程序包中的可执行文件的路径。现在,创建一个 POSIX 路径并告诉终端运行脚本。
set a to POSIX path of current_path
tell application "Terminal"
do script a
end tell
最后要做的是打开应用程序包内容并将您的 onefile 可执行文件复制到应用程序包中的正确位置。根据需要更改应用图标。