所以我有一个很好的适用于 OS X 的 python 应用程序,它运行良好。它运行一个外部终端脚本,我想将它包含在我的 python 应用程序中。理想情况下,我将能够运行 py2app 并将此脚本与其捆绑到可执行文件中,然后能够将其包含并在我的代码的 python 部分中运行它。这可能吗?
提前致谢!
额外编辑:我正在使用的脚本已编译。我不能只看里面然后粘贴它。
最佳答案
参见 http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html#option-reference并查看 --resources 参数。例如:
python setup.py py2app --resources foo
如果这是一个 shell 脚本,那将是一件完全有效的事情。对于二进制可执行文件,它有点老套。首先,p2app 的文档明确表示“不适用于代码!”。其次,OS X 文档说不要将可执行文件放在 Resources 目录中。这样做的主要原因是代码签名:默认设置“密封”资源中的所有内容作为主应用程序签名的一部分,但不应以这种方式密封单独的可执行文件,它们应该单独签名。
然而,尽管如此,它仍然有效。除了它可能不会以 +x 权限结束,所以在你的 py2app 步骤之后,你必须“chmod +x MyApp.app/Contents/Resources/foo”才能使其可运行。
您还可以使用 distutils package_data、data_files 和/或 MANIFEST 东西来添加具有任意相对路径的任意文件,这可能是更好的解决方案,但它更复杂。
无论哪种方式,在您的脚本中,您都应该使用与包相关的路径,您可以通过 PyObjC 轻松访问该路径。鉴于您使用的是 PowerPC 可执行文件,您可能需要如此多的向后兼容性以至于您不能依赖它,在这种情况下您可能不得不只使用“../Resources/foo”,但除此之外,它看起来像这样:
import Foundation
# ...
bundle = Foundation.NSBundle.mainBundle()
path = bundle.pathForResource_ofType_('foo', None)
然后您可以使用 NSTask 或子进程、Popen、os.system 等启动它。
关于python - 使用 py2app 制作的可执行文件可以包含其他终端脚本并运行它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370012/