我的理解是,只要使用非Apple默认的Python进行构建,最终用户就无需自己安装Python即可执行py2app构建的应用程序。在我自己的环境中开发和测试应用程序时,显然我已经安装了Python。具体来说,我使用python.org安装而不是Apple自己构建的 pyenv 。但是,当我将应用程序提供给未安装Python的最终用户时,她会得到:
找不到Python运行时。您可能需要安装Python的框架版本,或在此应用程序的Info.plist文件中编辑PyRuntimeLocations数组。
第二行涉及;如果它指出是真的,那么一个单独的应用程序实例都需要建立一个最终用户的每一个可能的位置的install例如/usr/bin,/Library/Frameworks等等。
/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
/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python
如果他们没有非Apple Python怎么办?如果他们有非Apple Python但不是2.6怎么办?如何避免这种硬编码的依赖关系?
--semi- standalone如果py2app认为您正在使用系统解释器,则会自动默认为mode。您不应该将来自Python.org的解释器视为“系统”解释器,但是您可以看到py2app使用此命令的想法:
--semi- standalone
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感到困惑。
bash
hash
hash -r python
如果那不能解决问题,请尝试将python解释器安装到类似这样的怪异位置,~/mypython以确保不会将它与系统python混淆。
~/mypython
作为最后的选择,我想您可以修改py2app源代码,以便is_system()始终返回False。不过,不确定是否会带来任何不良后果。
is_system()
False
PS- 这是一个py2app与conda打包的应用程序一起使用的小教程:https : //github.com/stuarteberg/helloworld 与此处的问题并不完全相关,但是您可以将其与自己的设置进行比较,并查找任何明显的差异。
conda