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

问题描述 投票:4回答:2

我正在使用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的python路径(在我的bash PATH中,但启动器不知道)。但是,应用程序的自动生成的Info.plist已经指向Anaconda python二进制文件:

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

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

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

python macos anaconda py2app
2个回答
4
投票

@ l'L'l的建议使我能够确定问题所在:在以“别名模式”(使用指向环境的符号链接而不是复制二进制文件)生成我的应用程序时,没有错误,但是构建没有别名的应用程序模式清除错误:py2app在不存在的名称libpython下查找/Applications/anaconda/lib/libpython3.4.dylib DLL。

快速检查显示,Anaconda以稍微不同的名称提供了此DLL:libpython3.4m.dylib。修补dist/my-script.app/Contents/Info.plist可以解决问题时,right解决方案是编辑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,它将具有默认名称。


0
投票

我想向Alexis添加评论,但这是我的第一篇有关堆栈溢出的文章。我对第694行的py2app / build_app.py文件进行了另一项调整>

尝试更改内部的build_app.py的第693行

else:
            dylib = 'libpython%sm.dylib' % (sys.version[:3],)

%s.mdlylib是%s.dylib。上面的行最初不包含m,因为sys.version [:3]仅具有3.6之类的值,而不是3.6m。在添加完上面的脚本后,脚本会正确执行。

© www.soinside.com 2019 - 2024. All rights reserved.