2016-01-17 31 views
1

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

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

第二行是关于;如果它指出是真的,那么一个单独的应用程序实例将需要为最终用户的每一个可能的位置的安装如/usr/bin/Library/Frameworks等待建

UPDATE: 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

如果他们没有什么非苹果的Python?如果他们有一个非Apple Python,但它不是2.6?如何避免这种有点硬编码的依赖关系?

+0

'find MyAppliation.app -name Python。框架'什么都不返回 – Pyderman

回答

0

如果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。不知道这是否会产生任何不良后果。

PS - 下面是使用py2appconda -packaged应用小教程: https://github.com/stuarteberg/helloworld不完全是有关您的问题就在这里,但你可以用你自己的设置进行比较,并寻找任何显着的差异。

相关问题