【问题标题】:py2app builds ok but app fails with "_tkinter.TclError" (and no error message!)py2app 构建正常,但应用程序因“_tkinter.TclError”而失败(并且没有错误消息!)
【发布时间】:2015-10-23 05:05:12
【问题描述】:

我在 Mac OSX Yosemite 10.10.1 上使用 py2app 0.9 运行来自 anaconda 发行版的 Python 3.4Tcl 8.5

在早期的尝试中,构建会失败,但快速搜索发现了这些问题的解决方案(即在setup.py 的选项中包括“包”:['tkinter', 'matplotlib'],并更改MachOGraph.py 的第 49 行:loader --> loader_path)

现在py2app 完成构建,并在别名模式下运行我的应用程序功能,但是当我在正常模式下构建时(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(compile(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'], )

【问题讨论】:

    标签: python-3.x tkinter anaconda py2app


    【解决方案1】:

    我遇到了这个问题,发现这是由于/Library/Frameworks 中的 tcl/tk 版本冲突。检查构建的输出(确保首先删除旧构建)以获取对不同版本的 tcl/tk 的引用。我发现我当前的 tcl/tk 版本是 py2app 链接到的 8.6,但同时 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)
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2011-08-28
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      相关资源
      最近更新 更多