所以我有这个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概念)
如何诊断此问题?
由于
答案 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”)