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

时间:2016-09-07 21:19:09

标签: python macos anaconda py2app

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

py2applet --make-setup my-script.py
python setup.py py2app -A

一切运行良好且没有错误,但是当我尝试启动应用程序时,我收到此错误消息:

  

my-script:python运行时不能找到(原文如此)。您可能需要安装Python的框架版本,或者在此应用程序Info.plist文件中编辑PyRuntimeLocations数组。

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

<key>PythonInfoDict</key>
<dict>
    <key>PythonExecutable</key>
    <string>/Applications/Experimental/anaconda/bin/python</string>
    ...

我看不出这里要解决的问题。我已经阅读了这些相关的问题:

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

1 个答案:

答案 0 :(得分:4)

@ l&#39; L&#39; l的建议让我能够确定问题:当我在&#34;别名模式&#34;中生成我的应用程序时没有错误。 (使用符号链接到环境而不是复制二进制文件),构建没有别名模式的应用程序会刷新错误:py2app在不存在的名称libpython下查找/Applications/anaconda/lib/libpython3.4.dylib DLL。

快速检查显示,Anaconda以略微不同的名称提供此DLL:libpython3.4m.dylib。虽然修补dist/my-script.app/Contents/Info.plist修复了问题,但正确的解决方案是编辑setup.py,以便将来的版本能够正常运行。在py2app documentation的帮助下,我将以下内容放在一起(显示的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'],
)

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