Tkinter ウィジェットを使用して写真の修正を表示するための単一の slideshow.py ファイルを作成しました。これは、Windows と Linux で完全に動作します。Python と tcl がインストールされていない Windows で実行するには、py2exe を使用して win32 実行可能ファイルにコンパイルします。setup.py は簡単です。
from distutils.core import setup
import py2exe
setup(windows=["slideshow.py"])
次に、「python setup.py py2exe」を実行すると、c:\Users\d2xia\ccm_wa\utils\tfps\ に「dist」フォルダーが生成され、「tcl」、「library.zip」、「slideshow.exe」、その下など。
slideshow.exe を実行すると、次のエラーが発生します。
Traceback (most recent call last):
File "slideshow.py", line 45, in <module>
File "Tkinter.pyc", line 1685, in __init__
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
C:/Users/d2xia/ccm_wa/utils/tfps/lib/tcl8.5 C:/Users/d2xia/ccm_wa/utils/tfps/lib/tcl8.5 C:/Users/d2xia/ccm_wa/utils/lib/tcl8.5 C:/Users/d2xia/ccm_wa/utils/tfps/library C:/Users/d2xia/ccm_wa/utils/library C:/Users/d2xia/ccm_wa/utils/tcl8.5.11/library C:/Users/d2xia/ccm_wa/tcl8.5.11/library
tcl8.5 と tk8.5 は実際には "tcl" フォルダーの下にありますが、py2exe によって生成された exe はまだ "lib" または "library" の下にあるようで、正しい TCL_LIBRARY と TK_LIBRARY が設定されていないようです。
「tcl」の名前を「lib」に変更しても、同じエラーが発生します。
set TCL_LIBRARY=c:\Users\d2xia\ccm_wa\utils\tfps\dist\tcl\tcl8.5\
set TK_LIBRARY=c:\Users\d2xia\ccm_wa\utils\tfps\dist\tcl\tk8.5\
次に、slideshow.exe がいくつかの新しいエラーを生成します。
c:/Users/d2xia/ccm_wa/utils/tfps/dist/tcl/tcl8.5/init.tcl: version conflict for package "Tcl": have 8.5.11, need exactly 8.5.2
version conflict for package "Tcl": have 8.5.11, need exactly 8.5.2
while executing
"package require -exact Tcl 8.5.2"
(file "c:/Users/d2xia/ccm_wa/utils/tfps/dist/tcl/tcl8.5/init.tcl" line 20)
invoked from within
"source c:/Users/d2xia/ccm_wa/utils/tfps/dist/tcl/tcl8.5/init.tcl"
("uplevel" body line 1)
invoked from within
"uplevel #0 [list source $tclfile]"
C:\apps\git\lib\tcl8.5 に Tcl 8.5.11 があり、C:\Python27\tcl\tcl8.5 に Tcl 8.5.2 があります。python で実行すると、python インストールで tcl が検索されるようですパスですが、py2exe は git インストール パスで別のコピーに見えます。
1. dist を作成するときに、正しい tcl8.5 コピーを py2exe に「割り当てる」方法は? 2. 生成された実行可能ファイルに dist 内の tcl パスを認識させるにはどうすればよいですか? 「lib」または「library」の代わりに「tcl」