如果从finder执行app bundle但是从命令行运行良好,则使用python构建的OSX应用程序会立即退出

时间:2014-03-15 01:22:22

标签: macos pyqt pyqt4 pyinstaller py2app

所以我有这个pyqt项目,我想用pyinstaller构建一个osx.app dmg

pyinstaller在

中创建了输出
dist/MyApplication.app

我可以直接从终端

运行它
cd dist
./MyApplication.app/Contents/MacOS/MyApplication

但是,如果我尝试使用

直接运行应用包
open -a MyApplication.app

open .
# double click on MyApplication.app folder (appears just as MyApplication from finder)

它开始然后立即退出

现在,如果我导航到

$ cd ./Contents/MacOS/

并打开发现者

$ open .
#then double click on MyApplication

它运行正常,但在后台打开终端窗口

Last login: Fri Mar 14 18:01:13 on ttys005
MyApplication/dist/MyApplication.app/Contents/MacOS/MyApplication ; exit;
MyApplication/dist/MyApplication.app/Contents/MacOS/MyApplication ; exit;

我使用类似的步骤来构建一个没有任何问题的Windows exe(尽管Windows中没有MyApplication.app概念)

如何诊断此问题?

由于

2 个答案:

答案 0 :(得分:2)

所以我按照这个py2app tutorial查看它是否比pyinstaller更好用这个代码

if __name__=="__main__":
    print "Hello"

并得到了类似的结果

即。应用程序关闭时

open -a HelloTest.app

虽然它可以正常运行

./HelloTest.app/Contents/MacOS/HelloTest

但是教程中的这个细节解释了它

When run normally, your application’s stdout 
and stderr output will go to the Console logs. 
To see them, open the Console application:

$ open -a Console

检查控制台日志后,好像我运行

open -a MyApplication.app

应用程序在沙箱中运行,如果打开任何要写入的文件而不指定绝对值  路径无法创建文件

如果我跑

./MyApplication.app/Contents/MacOS/MyApplication

直接应用程序可以在当前目录中创建文件

所以我必须返回并在创建文件时指定完整路径,而不是假设它将在工作目录中创建。

答案 1 :(得分:1)

使用pyinstaller构建OSX应用程序包时,如果使用相对路径并尝试在工作目录中写入文件,则会崩溃。

要在不使用绝对路径的情况下在工作目录中写入文件,请按照以下步骤创建路径:

path = os.path.join(os.path.dirname(sys.argv [0]),“file”)