使用pyenv中的py2app使用非系统Python构建的应用程序在其他计算机上无法运行

时间:2016-01-17 23:33:51

标签: python macos python-2.7 py2app pyenv

我的理解是,只要使用非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怎么办?如何避免这种有点硬编码的依赖?

1 个答案:

答案 0 :(得分:0)

如果它认为您正在使用系统解释器,那么<​​p> py2app会自动默认为--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 - 这是关于将py2appconda打包应用程序一起使用的一个小教程: https://github.com/stuarteberg/helloworld与您的问题不完全相关,但您可以将其与自己的设置进行比较,并寻找任何明显的差异。