使用 py2app 将 y .py 转换为 .app。乍一看,它看起来不错,但是当我去执行 open() 和 f.write (如下)创建一个 .txt 时,它不会创建文件。
f = open(name + ".txt", "w")
f.write("users inputs here")
当我将程序作为 .py 运行时,这绝对可以正常工作
任何人都有任何想法,我似乎找不到任何解释为什么会发生这种情况的东西。
问题是当前目录设置为/
从 Finder 启动应用程序时的目录。因此,路径是相对于/
,而不是您的应用程序包。
要获取 Python exe 的路径,请尝试sys.executable
. 请注意,您可能需要添加../../
才能退出Contents/MacOS
目录。
但是,更好的解决方案可能是简单地使用文件对话框,允许用户选择保存位置。
我的程序遇到了同样的问题,我打开一个文件并将列标题写入该文件,然后在程序中循环迭代数据。当应用程序转换为 .app 时,程序在到达将列标题写入文件时会失败。如果我将其注释掉,它将正常工作。我从列标题中的文本中删除了所有特殊字符,它工作正常。不知道为什么会这样。
不起作用:
file.write("\n" + "Image" + "\t" + "x (pxl)" + "\t" + "y (pxl)" + "\t" + "radius (ID; µm)" + "\t" + "GlobalThresh Reported:" + "\n")
作品:
file.write("\n" + "Image" + "\t" + "x" + "\t" + "y" + "\t" + "radius" + "\t" + "GlobalThresh Reported" + "\n")
一个实现 sys.executable 的实用解决方案,正如@nneonneo 所说的那样;这个对我有用:
location = os.path.abspath(
os.path.join(sys.executable + "/file_name", '..', '..', '..', '..','..', "file_name"))
它将文件打印在 .app 文件夹的上一层