Py2app строит нормально, но приложение терпит неудачу с "_tkinter.TclError" (и нет сообщения об ошибке!)
Я использую py2app 0.9
в Mac OSX Yosemite 10.10.1
, выполняющий Python 3.4
из дистрибутива anaconda и Tcl 8.5
.
В более ранних попытках сборка завершилась неудачно, но быстрый поиск выявил решения этих проблем (включая "пакеты": ['tkinter', 'matplotlib']
в OPTIONS в setup.py
и сменив строку 49 MachOGraph.py
: 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 (компиляция (источник, путь, '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, интерактивные, 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'], )
Ответы
Ответ 1
У меня возникла эта проблема и я обнаружил, что это произошло из-за противоречивых версий tcl/tk в /Library/Frameworks
. Проверьте выходные данные сборки (обязательно удалите старую сборку сначала) для ссылок на разные версии tcl/tk. Я обнаружил, что моя текущая версия tcl/tk была 8.6, к которой ссылалась py2app, но в то же время py2app копировал файлы из tcl/tk 8.5. Я решил проблему, удалив 8.5 из `/Library/Frameworks/(Tcl/Tk).framework/Versions.
ПРИМЕЧАНИЕ. Я бы не рекомендовал удалять версию, если вы не видите проблему в выводе сборки, и знаете, что ничто другое (что вас беспокоит) зависит от этой версии.
Однако это была не моя единственная ошибка, потому что когда я удалил старую версию, я обнаружил новую ошибку _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)
Надеюсь, что это помогло.