Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pyenv中使用py2app并使用非系统Python构建的应用程序无法在其他机器上运行_Python_Macos_Python 2.7_Py2app_Pyenv - Fatal编程技术网

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

在pyenv中使用py2app并使用非系统Python构建的应用程序无法在其他机器上运行,python,macos,python-2.7,py2app,pyenv,Python,Macos,Python 2.7,Py2app,Pyenv,我的理解是,只要使用非苹果默认的Python进行构建,最终用户就不需要自己安装Python来执行py2app构建的应用程序。在我自己的环境中开发和测试应用程序时,我显然安装了Python。具体来说,我使用python.org安装了一个pyenv,而不是苹果自己的。然而,当我将应用程序交给没有安装Python的最终用户时,她得到了: 找不到Python运行时。您可能需要安装一个 Python的框架构建,或在中编辑PyRuntimeLocations数组 此应用程序的Info.plist文件 第二条

我的理解是,只要使用非苹果默认的Python进行构建,最终用户就不需要自己安装Python来执行py2app构建的应用程序。在我自己的环境中开发和测试应用程序时,我显然安装了Python。具体来说,我使用python.org安装了一个pyenv,而不是苹果自己的。然而,当我将应用程序交给没有安装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
PythonExecutable

/如果py2app认为您正在使用系统解释器,则Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Pythonpy2app会自动默认为
--半独立
模式。来自Python.org的解释器不应算作“系统”解释器,但使用此命令可以看到
py2app
的想法:

$ python -c "import py2app.build_app; print py2app.build_app.is_system()"
False
需要注意的一个问题是:在我今天安装了Python.org解释器之后,
bash
没有更新它的
hash
缓存,在我启动Python时造成了奇怪的不兼容。我必须键入
hash-rpython
来重置缓存,并确保使用了正确版本的python。(解决此问题的另一种方法是注销并再次登录。)我认为同样的问题可能导致
py2app
对您是否在使用系统python感到困惑

如果这不起作用,那么试着将python解释器安装到一个奇怪的位置,比如
~/mypython
或类似的地方,以确保系统python不会混淆它

作为最后一种手段,我想您可以破解
py2app
源代码,这样
is\u system()
总是返回
False
。不过,不确定这是否会产生任何不利后果

PS——这里有一个关于使用
py2app
conda
打包应用程序的小教程:
这里与您的问题不完全相关,但您可以将其与您自己的设置进行比较,并查找任何明显的差异。

find myappliance.app-name Python.framework
不返回任何内容