2015-10-23 12 views
10

py2app 0.9Mac OSX Yosemite 10.10.1で、のPython 3.4を実行しています。 ( - > loader_pathローダー:setup.pyでOPTIONSで['tkinter', 'matplotlib']、およびMachOGraph.pyの49行を変更すなわち「パッケージ」を含む)py2appは正常ですが、アプリケーションは "_tkinter.TclError"で失敗します(エラーメッセージは表示されません)

以前の試みで

、ビルドは失敗しますが、迅速な検索は、これらの問題に対する解決策を明らかにしました

py2app終了し、ビルド、およびエイリアスモードで私のアプリの機能を実行しているが、私は通常モード(のpython setup.pypy2app)で構築すると、得られるアプリが開かないと、コンソールには、次のトレースバックを示しています。

トレースバックを( m OST最近の呼び出しが最後):_runで "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ ブートの.py"、 ライン355、() 「/ユーザのファイルをファイル/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ boot .py "、 行336、_run exec(コンパイル(ソース、パス、 'exec')、グローバル()、 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、 tk.Tk. init(self、* args、** kwargs)ファイル "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/lib/python3.4/tkinter/ .py 」、 ライン1851、のinitには self.tk = _tkinter.create(スクリーンネーム、ベース名、 classNameのは、インタラクティブ、wantobjects、useTk、同期、使用) _tkinter.TclError

イライラする事があるということ"_tkinter.TclError"のエラーメッセージは表示されません。私はかなり検索し、この問題の解決策や複製を見つけることに失敗しました。私はさまざまなtkinterベースのアプリケーションを構築しようとしましたが、それらはすべて同じように失敗します。

これは、tk.Tkの最初の呼び出しで発生しています。 (自己、* 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

私はこの問題を抱えて、それが/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) 

希望すると助かりました。

関連する問題