2015-10-23 12 views
10

Sto usando py2app 0.9 su Mac OSX Yosemite 10.10.1 esecuzione Python 3.4 dalla distribuzione Anaconda e con Tcl 8.5.py2app costruisce ok, ma non riesce con app (nessun messaggio di errore e!) "_tkinter.TclError"

In precedenti tentativi, l'accumulo fallirebbe, ma ricerche rapide rivelato soluzioni a questi problemi (ossia includendo 'pacchetti': ['tkinter', 'matplotlib'] in opzioni in setup.py, e cambiando la linea 49 del MachOGraph.py: loader -> loader_path)

Ora py2app finisce la costruzione e l'esecuzione in modalità Alias ​​mie funzioni app, ma quando ho costruire in modalità normale (python setup.pypy2app) l'applicazione risultante non si apre e la console mostra la seguente traceback:

traceback (m ost recente chiamata scorso): File "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ avvio .py", la linea 355, in _run() file "/ Users /ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ boot .py ", riga 336, in _run exec (compile (source, path, 'exec'), globals(), globals()) File "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/deani.py", riga 731, in app = fishingapp() File "/ Utenti/ryankeenan /Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/deani.py ", riga 536, in init tk.Tk. init (auto, * args, ** kwargs) file "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/lib/python3.4/tkinter/ init .py ", linea 1851, in init self.tk = _tkinter.create (username, baseName, className, interattivo, wantobjects, useTk, sincronizzazione, l'uso) _tkinter.TclError

La cosa frustrante è che non stampa alcun messaggio di errore per "_tkinter.TclError". Ho cercato un bel po 'e non sono riuscito a trovare soluzioni o repliche di questo problema. Ho provato a creare varie app basate su tkinter e tutti falliscono allo stesso modo.

Questo si verifica alla prima chiamata a tk.Tk. init (self, * args, ** kwargs) nel mio codice.

Il mio file setup.py si presenta così:

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'],) 

risposta

0

ho avuto questo problema e scoperto che era a causa di versioni contrastanti di Tcl/Tk nel /Library/Frameworks. Controlla l'output della build (assicurati di cancellare prima la vecchia build) per i riferimenti a diverse versioni di tcl/tk. Ho scoperto che la mia versione corrente di tcl/tk era 8.6 a cui py2app stava collegando, ma allo stesso tempo py2app stava copiando file da tcl/tk 8.5. Ho risolto il problema rimuovendo 8.5 da `/Library/Frameworks/(Tcl/Tk).framework/Versions.

NOTA: non è consigliabile rimuovere una versione a meno che non si veda il problema nell'output di generazione e si sappia che nient'altro (che interessa) dipende da quella versione.

Tuttavia, questo non era il mio unico errore, perché quando ho eliminato la vecchia versione, ho scoperto un nuovo errore _tkinter.Tcl, che indicava un bug nel mio codice. Se si desidera visualizzare il traceback senza dover andare alla console, suggerisco di inserire una dichiarazione try/except attorno al codice di partenza che stampa il traceback su un file. Ad esempio:

 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) 

Spero che questo abbia aiutato.