如何将 py2app 与 Anaconda python 一起使用?

ale*_*xis 4 python macos py2app anaconda

我正在使用 Anaconda 发行版中的 Python 3,并尝试将简单的 Python 程序转换为 OS X 应用程序(在 El Capitan 上运行)。按照教程中的说明,我跑了

py2applet --make-setup my-script.py
python setup.py py2app -A
Run Code Online (Sandbox Code Playgroud)

一切正常,没有错误,但是当我尝试启动应用程序时,我收到以下错误消息:

我的脚本:无法(原文如此)定位 python 运行时。您可能需要安装 Python 的框架构建,或编辑此应用程序 Info.plist 文件中的 PyRuntimeLocations 数组。

我理解这意味着我应该添加 Anaconda 的 python 路径(它在我的 bash PATH 中,但启动器不知道)。但是,自动生成的应用程序Info.plist已经指向 Anaconda python 二进制文件:

<key>PythonInfoDict</key>
<dict>
    <key>PythonExecutable</key>
    <string>/Applications/Experimental/anaconda/bin/python</string>
    ...
Run Code Online (Sandbox Code Playgroud)

我不明白这里有什么要解决的。我已阅读这些相关问题:

第一个问题涉及相同的错误消息,并按照第二个问题中的建议解决。但据我了解,这些问题描述了相反的情况:OP 正在运行与操作系统一起分发的 python,并且想要分发他们的应用程序;解决方案是使用单独安装的python。我正在使用非系统 python,我还没有尝试分发任何东西。那么是什么导致了这里的问题,解决方案是什么?

ale*_*xis 9

@l'L'l 的建议让我发现了问题:虽然我在“别名模式”下生成我的应用程序时没有错误(使用指向环境的符号链接而不是复制二进制文件),但构建应用程序时没有刷新别名模式出错误:在不存在的名称下py2app查找libpythonDLL /Applications/anaconda/lib/libpython3.4.dylib

快速检查显示 Anaconda 以稍微不同的名称提供此 DLL:libpython3.4m.dylib. 虽然修补可以dist/my-script.app/Contents/Info.plist解决问题,但正确的解决方案是进行编辑,setup.py以便将来的构建能够正常工作。在py2app 文档的帮助下,我整理了以下内容(setup.py显示的部分内容):

OPTIONS = {'argv_emulation': True,
           'plist': {
               'PyRuntimeLocations': [
                '@executable_path/../Frameworks/libpython3.4m.dylib',
                '/Applications/anaconda/lib/libpython3.4m.dylib'
               ]
           }}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)

路径来自生成的Info.plist; 我只修改了绝对路径,理由是如果我在相对路径上提供了本地 DLL,它将具有默认名称。