Macos 如果从finder执行应用程序包,使用python构建的OSX应用程序将立即退出,但从命令行运行良好

Macos 如果从finder执行应用程序包,使用python构建的OSX应用程序将立即退出,但从命令行运行良好,macos,pyqt,pyqt4,pyinstaller,py2app,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 或 它开始,然后立即停止 现在如果我导航到 $ cd ./Contents/MacOS/ 打开一个查找器

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

pyinstaller在中创建了输出

dist/MyApplication.app
我可以直接从终端运行它

cd dist
./MyApplication.app/Contents/MacOS/MyApplication
但是,如果我尝试直接使用

open -a MyApplication.app

它开始,然后立即停止

现在如果我导航到

$ 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概念)

如何诊断此问题

谢谢

所以我遵循这条代码,看看它是否比pyinstaller工作得更好

if __name__=="__main__":
    print "Hello"
得到了相似的结果

i、 当我关闭时,应用程序关闭

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
应用程序可以直接在当前目录中创建文件


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

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

要在工作目录中写入文件而不使用绝对路径,请将路径设置为:


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

我也遇到了这个问题。我不认为OpenA是一个有效的解决方案(你的应用程序用户也必须这样做)。我遇到了同样的问题。我知道这篇文章有点老,但如果可能的话,你能详细说明一下你是如何解决这个问题的吗?我将非常感激。
./MyApplication.app/Contents/MacOS/MyApplication