py2app 中 popen 的权限问题

Permission issues with popen within py2app

我正在使用 py2app 捆绑一个 python 脚本,该脚本使用 anaconda python 发行版。

由于 py2app 不能很好地处理需要用户输入的终端脚本,我有一个 py2app setup.py 启动的 Tkinter 文件,然后使用 popen 进一步启动我的 .py 脚本。

在本地,这工作正常:

import subprocess as sub
command = "~/anaconda/bin/python -u myscript.py " + str(groups_count)
process = sub.Popen(command, shell=True, stdout=sub.PIPE, stderr=sub.PIPE, bufsize=1, universal_newlines=True)

但是当我想分发它时,我需要使用

中包含的分发替换硬编码路径和 运行
import subprocess as sub
command = sys.executable + " -u myscript.py " + str(groups_count)
process = sub.Popen(command, shell=True, stdout=sub.PIPE, stderr=sub.PIPE, bufsize=1, universal_newlines=True)

这会导致错误:

/bin/sh: /Users/username/projectname/appname/dist/MyOSXapp.app/Contents/MacOS/python: Permission denied

如果我查看 /MyOSXapp.app/Contents/Frameworks 中的 libpython2.7.dylib,它似乎不可执行,但每个人都可读。这都是py2app组装的。

我需要在我的 anaconda python 上 运行 popen 在 pyapp 中分发。我该怎么做?

我通过在 osx.app 文件中为 py2app 保存的 python 文件添加可执行权限来解决这个问题。

$ chmod +x ./dist/MyOSXapp.app/Contents/MacOS/python 

此外,还通过 issue 228 在 py2app 中添加了对此的修复。