Python 3.x py2app TypeError:dyld_find()获取了意外的关键字参数';装载机&x27;

Python 3.x py2app TypeError:dyld_find()获取了意外的关键字参数';装载机&x27;,python-3.x,osx-lion,pillow,py2app,Python 3.x,Osx Lion,Pillow,Py2app,我在使用py2app构建应用程序时遇到困难。我可以使用以下命令在alias模式下构建它而不会出现问题: python3.4 setup.py py2app -A 但是,当我尝试使用以下方法构建它时: python3.4 setup.py py2app 我根据这篇文章的标题得到了错误消息。根据我所做的研究,我相信这是枕头的问题;但是我需要这个应用的枕头。(除非有另一个模块我可以用来导入图像??)。我也尝试过冷冻,但没有成功 非常感谢任何帮助或指导 完全回溯如下: Traceback (most

我在使用py2app构建应用程序时遇到困难。我可以使用以下命令在alias模式下构建它而不会出现问题:

python3.4 setup.py py2app -A
但是,当我尝试使用以下方法构建它时:

python3.4 setup.py py2app
我根据这篇文章的标题得到了错误消息。根据我所做的研究,我相信这是枕头的问题;但是我需要这个应用的枕头。(除非有另一个模块我可以用来导入图像??)。我也尝试过冷冻,但没有成功

非常感谢任何帮助或指导

完全回溯如下:

Traceback (most recent call last):
File "setup.py", line 19, in <module>
setup_requires=['py2app'],
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
distutils/core.py", line 148, in setup dist.run_commands()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
distutils/dist.py", line 955, in run_commands self.run_command(cmd)
File"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
distutils/dist.py", line 974, in run_command cmd_obj.run()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-  packages/py2app/build_app.py", line 659, in run self._run()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site- packages/py2app/build_app.py", line 865, in _run self.run_normal()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site- packages/py2app/build_app.py", line 959, in 
run_normal self.create_binaries(py_files, pkgdirs, extensions,loader_files)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site- packages/py2app/build_app.py", line 1214, in create_binaries
platfiles = mm.run()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-packages/macholib/MachOStandalone.py", line 105, in run
mm.run_file(fn)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-packages/macholib/MachOGraph.py", line 84, in run_file
self.scan_node(m)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-packages/macholib/MachOGraph.py", line 110, in scan_node 
m =  self.load_file(filename, caller=node)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-packages/macholib/MachOGraph.py", line 93, in load_file
newname = self.locate(name, loader=caller)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-packages/macholib/MachOStandalone.py", line 23, in locate
newname = super(FilteredMachOGraph, self).locate(filename, loader)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
site-packages/macholib/MachOGraph.py", line 49, in locate
loader=loader.filename)
TypeError: dyld_find() got an unexpected keyword argument 'loader'
回溯(最近一次呼叫最后一次):
文件“setup.py”,第19行,在
安装程序需要=['py2app'],
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
distutils/core.py”,第148行,在setup dist.run_commands()中
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
distutils/dist.py”,第955行,在run_命令self.run_命令(cmd)中
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
distutils/dist.py”,第974行,在run_命令cmd_obj.run()中
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
站点-packages/py2app/build_app.py”,第659行,运行中的self._run()
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
站点-packages/py2app/build_app.py”,第865行,in_run self.run_normal()
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
站点-packages/py2app/build_app.py”,第959行,在
运行\u普通self。创建\u二进制文件(py\u文件、pkgdir、扩展名、加载程序\u文件)
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
站点-创建二进制文件中的packages/py2app/build_app.py”,第1214行
platfiles=mm.run()
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
现场包/macholib/MachOStandalone.py”,第105行,运行中
mm.run_文件(fn)
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
站点包/macholib/MachOGraph.py”,第84行,在run_文件中
自扫描节点(m)
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
站点包/macholib/MachOGraph.py”,第110行,扫描节点
m=self.load_文件(文件名,调用方=节点)
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
load_文件中的第93行“站点包/macholib/MachOGraph.py”
newname=self.locate(name,loader=caller)
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
现场包/macholib/MachOStandalone.py”,第23行,位于
newname=super(FilteredMachOGraph,self).locate(文件名,加载程序)
文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/
现场包/macholib/MachOGraph.py”,第49行,位于
loader=loader.filename)
TypeError:dyld_find()获得意外的关键字参数“loader”

这是一个临时解决方案,可能会破坏其他东西。我建议这样做是一个虚拟环境,这样你就不会弄乱你的常规软件包。这对我很有用(virtenv是我的虚拟环境的名称)


打开文件
/virtenv/lib/python3.4/site packages/macholib/dyld.py
,并将
加载程序的每个实例替换为
加载程序
。现在保存并重试。

您可以使用monkey patch macholib,而不是在站点包中修改它。将以下文件放置到包含setup_py2app.py的目录中,并将
import macholib_patch
添加到顶部

macholib_patch.py:

"""
Monkey-patch macholib to fix "dyld_find() got an unexpected keyword argument 'loader'".

Add 'import macholib_patch' to the top of set_py2app.py
"""

import macholib
#print("~"*60 + "macholib verion: "+macholib.__version__)
if macholib.__version__ <= "1.7":
    print("Applying macholib patch...")
    import macholib.dyld
    import macholib.MachOGraph
    dyld_find_1_7 = macholib.dyld.dyld_find
    def dyld_find(name, loader=None, **kwargs):
        #print("~"*60 + "calling alternate dyld_find")
        if loader is not None:
            kwargs['loader_path'] = loader
        return dyld_find_1_7(name, **kwargs)
    macholib.MachOGraph.dyld_find = dyld_find
“”“
Monkey补丁macholib修复“dyld_find()得到一个意外的关键字参数'loader'”。
将“导入macholib_补丁”添加到set_py2app.py的顶部
"""
进口马乔利布
#打印(“~”*60+”macholib版本:“+macholib.\uuuuuuuuuu版本)

如果是macholib.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu版本\uuuuuuuuuuuuu感谢Michal的帖子。进行这些建议的更改使我的程序可以毫无错误地构建。虽然当我双击我的应用程序时,它不起作用。如果我试图通过转到
dist>(右键单击)在.app file>contents>MacOS>my.app
上显示包内容进行调试,终端会显示:
Traceback(最近一次调用):file”/Users/Name/Python programs/dist/BAWP.app/contents/Resources/_uboot\uuuu.py“,第67行,在_recipes _pil _prescriptimport Image importorror中:没有名为“Image”的模块
我认为问题在于枕头不能很好地与py2app配合使用,但这是我所知道的唯一一款。是的,导致我偶然发现这一点的问题与matplotlib有关。我还注意到,使用py2app构建模块时,导入模块的工作方式有点不同(正常工作的代码会引发导入错误)。如何在代码中导入图像?如果您尝试以不同的方式导入,会发生什么情况呢?目前,我使用PIL import Image、ImageTk
导入模块。据我所知,只有一种方法可以导入图像。除非我弄错了…对于标准图像导入,我使用
ImageTk.PhotoImage(file=“/Users/Name/image.png”)
,对于gif图像,我使用
image=PhotoImage(data=b64_data)
,对于来自网站的图像,我使用
pil_image=image.open(data)
然后
image=ImageTk.PhotoImage(pil_image)
再往下几行。您是否以任何其他方式导入了未引发错误的文件?起初,我使用tkinter导入文件对话框中的
,然后调用
文件对话框。asksaveasfile()
-这正常工作,但在运行py2app构建的应用程序时引发和导入错误。我将其从tkinter.filedialog import asksaveasfile更改为
,并相应地更改了调用。这在两种情况下都有效。只是补充一下,起初我认为这不是解决方案,因为我的应用程序在py2app构建后仍然崩溃,但后来我发现这是因为我需要在setup.py文件选项中包含PIL包。正常情况下,这是可行的;然而,我偶然发现了另一个问题,我的图像没有加载,我发布了另一个问题:虽然我在构建过程中没有得到错误,但我看到这个
模块没有找到(有条件的)