我在py2app 0.9
使用Mac OSX Yosemite 10.10.1
运行Python 3.4
来自anaconda发行版并使用Tcl 8.5
。
在之前的尝试中,构建会失败,但快速搜索会显示这些问题的解决方案(即在['tkinter', 'matplotlib']
的OPTIONS中包含'packages':setup.py
,并更改MachOGraph.py
的第49行}:loader - > loader_path)
现在py2app
完成构建,并在Alias模式下运行我的应用程序功能,但是当我以正常模式(python setup.py
py2app
)构建时,生成的应用程序将无法打开并且控制台显示以下回溯:
Traceback(最近一次调用最后一次):文件 “/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/boot.py” 第355行,在_run()文件中 “/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/boot.py” 第336行,在_run exec中(编译(source,path,'exec'),globals(), globals())文件 “/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/deani.py” 第731行,在app = fishingapp()文件中 “/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/deani.py” 第536行,在 init tk.Tk。 init (self,* args,** kwargs)文件 “/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/lib/python3.4/tkinter/init.py” 第1851行,在 init self.tk = _tkinter.create(screenName,baseName, className,interactive,wantobjects,useTk,sync,use) _tkinter.TclError
令人沮丧的是,它不会为“_tkinter.TclError”打印任何错误消息。我搜索了很多,没有找到任何解决方案或这个问题的复制品。我已经尝试构建各种基于tkinter的应用程序,它们都以同样的方式失败。
这是在我的代码第一次调用tk.Tk。 init (self,* args,** kwargs)时发生的。
我的setup.py文件如下所示:
from setuptools import setup
APP = ['deani.py']
DATA_FILES = []
OPTIONS = {'packages': ['tkinter','matplotlib'],'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'], )
答案 0 :(得分:0)
我遇到了这个问题并发现它是由于/Library/Frameworks
中tcl / tk的版本冲突造成的。检查构建的输出(确保先删除旧构建)以获取对不同版本的tcl / tk的引用。我发现我当前版本的tcl / tk是8.6,py2app链接到了,但同时py2app正在从tcl / tk 8.5复制文件。我通过从`/Library/Frameworks/(Tcl/Tk).framework/Versions中删除8.5来解决了这个问题。
注意:除非您在构建输出中看到问题并且知道其他任何内容(您关心的内容)取决于该版本,否则我不建议删除版本。
然而,这不是我唯一的错误,因为当我删除旧版本时,我发现了一个新的_tkinter.Tcl
错误,它指出了我的代码中的错误。如果你想在不必去控制台的情况下查看回溯,我建议在你的起始代码周围放置一个try / except语句,它将回溯打印到文件中。例如:
import sys, time, traceback
try:
run()#Your opening code goes here
except:
with open('/Path/to/somewhere/tb.txt','a') as file:
y,mn,d,h,m,s,a,b,c = time.localtime()
file.write("==================="+str(mn)+'/'+str(d)+' '+
str(h)+':'+str(m)+':'+str(s)+
"=====================\n")
traceback.print_exc(file=file)
希望这会有所帮助。