在python中构建必须在终端中运行的应用程序

时间:2014-10-08 19:50:30

标签: python macos pyinstaller py2app

我正在尝试从具有

的python模块中创建一个独立的双击macosx应用程序
if __name__ == __main__

在其中运行。但是,每当我尝试将其与py2app或pyinstaller这样的东西捆绑在一起时,如果我创建了一个应用程序包,则终端窗口不会启动以运行该程序。有关如何绕过这个的任何想法?终端窗口需要打开才能接受一些用户输入。如果需要更多信息,请告诉我,这是我第一次尝试这样做。

P.S。我能够将其用于Windows并将其打包到安装程序中进行分发。

1 个答案:

答案 0 :(得分:1)

好的,我明白了。由于从头开始构建应用程序包在mac上有点棘手,所以找到一个可以为你构建它的程序会更好,我使用applescript来完成它。

首先,您需要构建来自python代码的可执行文件。我使用了pyinstaller和--onefile选项。所以要构建你的可执行文件使用命令:

$pyinstaller --onefile yourPythonProgramYouWantToBuild.py

构建完成后,双击该文件或使用终端打开它以检查其是否有效,是否已包含各种库中所需的所有代码等。如果可行,请执行下一步。

打开applescript并设置一个新脚本。

这是我如何让事情发挥作用的 1)applescript获取其所在的目录 2)编译后的可执行文件将(手动)放置在应用程序包中,应用程序内的脚本将知道它在应用程序包中的位置 3)脚本找到可执行文件的完全路径,并告诉终端应用程序运行它

好的,怎么做?

制作一个新的AppleScript,并在其中加入一些虚拟代码,例如:

display dialog "Hello, world!"

接下来,将此AppleScript保存为应用包。转到您刚刚创建的新应用包,并在应用的包内容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

但是,如果您在苹果脚本中输入display dialog current_path,那么当您从应用套装中运行该代码时,您会发现它不会在应用包中一直带您。例如,如果您从桌面运行应用程序,您将获得的路径类似于~/Desktop/,这不是我们想要的,因为我们需要获取应用程序内的路径。接下来我们需要添加一些东西到底,以便获得应用程序包中的好东西。使用与此类似的命令:

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可执行文件复制到应用包中的正确位置。根据需要更改应用图标。