如何将 py2app 与 Anaconda python 一起使用?
How do I use py2app with Anaconda python?
我正在使用来自 Anaconda 发行版的 Python 3,并尝试将一个简单的 python 程序转换为 OS X 应用程序(El Capitan 上的 运行) .按照 the tutorial 中的说明,我 运行
py2applet --make-setup my-script.py
python setup.py py2app -A
一切正常 运行 没有错误,但是当我尝试启动该应用程序时,我收到此错误消息:
my-script: A python runtime not could (sic) be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this applications Info.plist file.
我理解这意味着我应该添加 Anaconda 的 python 路径(它在我的 bash 路径中,但启动器不知道)。但是,应用程序自动生成的 Info.plist
已经指向 Anaconda python 二进制文件:
<key>PythonInfoDict</key>
<dict>
<key>PythonExecutable</key>
<string>/Applications/Experimental/anaconda/bin/python</string>
...
我看不出这里有什么要解决的。我已经阅读了这些相关问题:
- How do I use py2app with a virtual environment?
- py2app is not copying the python framework to the new app while using virutalenv
第一个问题同样报错,按照第二个问题的提示解决。但据我了解,这些问题描述了相反的情况:OP 是 运行 与 OS 一起分发的 python,并且想要分发他们的应用程序;解决办法是使用单独安装的python。我 是 使用非系统 python,我还没有尝试分发任何东西。那么这里的问题是什么造成的,解决方法是什么?
@l'L'l 的建议让我确定了问题所在:虽然我在 "alias mode" 中生成我的应用程序时没有错误(使用指向环境的符号链接而不是复制二进制文件),但构建没有别名模式的应用程序清除了错误:py2app
在不存在的名称 /Applications/anaconda/lib/libpython3.4.dylib
下查找 libpython
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,它将具有默认名称。
我正在使用来自 Anaconda 发行版的 Python 3,并尝试将一个简单的 python 程序转换为 OS X 应用程序(El Capitan 上的 运行) .按照 the tutorial 中的说明,我 运行
py2applet --make-setup my-script.py
python setup.py py2app -A
一切正常 运行 没有错误,但是当我尝试启动该应用程序时,我收到此错误消息:
my-script: A python runtime not could (sic) be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this applications Info.plist file.
我理解这意味着我应该添加 Anaconda 的 python 路径(它在我的 bash 路径中,但启动器不知道)。但是,应用程序自动生成的 Info.plist
已经指向 Anaconda python 二进制文件:
<key>PythonInfoDict</key>
<dict>
<key>PythonExecutable</key>
<string>/Applications/Experimental/anaconda/bin/python</string>
...
我看不出这里有什么要解决的。我已经阅读了这些相关问题:
- How do I use py2app with a virtual environment?
- py2app is not copying the python framework to the new app while using virutalenv
第一个问题同样报错,按照第二个问题的提示解决。但据我了解,这些问题描述了相反的情况:OP 是 运行 与 OS 一起分发的 python,并且想要分发他们的应用程序;解决办法是使用单独安装的python。我 是 使用非系统 python,我还没有尝试分发任何东西。那么这里的问题是什么造成的,解决方法是什么?
@l'L'l 的建议让我确定了问题所在:虽然我在 "alias mode" 中生成我的应用程序时没有错误(使用指向环境的符号链接而不是复制二进制文件),但构建没有别名模式的应用程序清除了错误:py2app
在不存在的名称 /Applications/anaconda/lib/libpython3.4.dylib
下查找 libpython
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,它将具有默认名称。