2014-10-08 31 views
1

运行我试图做一个独立的,双击MacOSX的应用阶段从它的构建的应用程序从蟒蛇必须在终端

if __name__ == __main__ 

线运行的Python模块。但是,每当我尝试将其与py2app或pyinstaller之类的东西捆绑在一起时,如果我制作应用程序包,终端窗口不会启动以运行该程序。任何想法如何解决这个问题?终端窗口需要打开才能接受某些用户输入。如果需要更多信息,请告诉我,这是我第一次尝试这样做。

P.S.我能够得到这个窗口的工作和打包在一个安装程序分发。

回答

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