3

我的理解是,只要使用非 Apple 默认的 Python 来构建,最终用户就不需要自己安装 Python 来执行 py2app 构建的应用程序。在我自己的环境中开发和测试应用程序时,我显然已经安装了 Python。具体来说,我内置了一个带有 python.org 安装的 pyenv,而不是 Apple 自己的然而,当我将应用程序提供给未安装 Python 的最终用户时,她得到:

找不到 Python 运行时。您可能需要安装 Python 的框架构建,或编辑此应用程序的 Info.plist 文件中的 PyRuntimeLocations 数组。

第二行是关于;如果它所说的是真的,那么需要为最终用户安装的每个可能位置构建一个单独的应用程序实例,例如/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 怎么办?如何避免这种有点硬编码的依赖?

4

1 回答 1

2

如果py2app--semi-standalone认为您正在使用系统解释器,它会自动默认为模式。您来自 Python.org 的解释器不应算作“系统”解释器,但您可以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. 不过,不确定这是否会产生任何不利后果。

py2appPS——这里有一个关于使用conda-packaged 应用程序 的小教程: https ://github.com/stuarteberg/helloworld 与您的问题不完全相关,但您可以将其与您自己的设置进行比较并寻找任何明显的差异。

于 2016-01-18T19:14:46.690 回答