我的理解是,只要使用非Apple默认的Python构建,最终用户就不需要自己安装Python来执行py2app构建的应用程序。在我自己的环境中开发和测试应用程序时,我显然已经安装了Python。具体来说,我使用python.org安装内置了 pyenv ,而不是Apple自己的安装。然而,当我将应用程序交给没有安装Python的最终用户时,她会得到:
无法找到Python运行时。您可能需要安装一个 Python的框架构建,或编辑PyRuntimeLocations数组 此应用程序的Info.plist文件。
第二条线是关注的;如果它说明的是真的,那么就需要为最终用户安装的每个可能位置构建单独的应用实例,例如/usr/bin
,/Library/Frameworks
等。
更新: Info.plist定义:
<key>PythonExecutable</key>
<string>/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python</string
然而,最终用户只在/usr/bin
中安装了系统。
这是否意味着每个最终用户都需要外部安装的Python,并且它必须位于/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python
如果他们没有非Apple Python怎么办?如果他们有非Apple Python但它不是2.6怎么办?如何避免这种有点硬编码的依赖?
答案 0 :(得分:0)
--semi-standalone
模式。来自Python.org的翻译不应该被视为&#34;系统&#34;解释器,但您可以使用此命令查看py2app
的想法:
$ python -c "import py2app.build_app; print py2app.build_app.is_system()"
False
需要注意的一个问题是:在我今天安装了一个Python.org解释器之后,bash
没有更新它的hash
缓存,当我启动python时导致奇怪的不兼容性。我必须键入hash -r python
来重置缓存并确保使用正确版本的python。 (修复此问题的另一种方法是注销并再次登录。)我认为同样的问题可能导致py2app
对您是否使用系统python感到困惑。
如果没有做到这一点,那么尝试将python解释器安装到一个奇怪的位置,比如~/mypython
或类似的东西,只是为了确保它不可能是困惑于系统python。
作为最后的手段,我想您可以破解py2app
源代码,以便is_system()
始终返回False
。但不确定这是否会产生任何不良后果。
PS - 这是关于将py2app
与conda
打包应用程序一起使用的一个小教程:
https://github.com/stuarteberg/helloworld与您的问题不完全相关,但您可以将其与自己的设置进行比较,并寻找任何明显的差异。