Python 如何使用py2exe更正TCL_库和TK_库

Python 如何使用py2exe更正TCL_库和TK_库,python,tcl,py2exe,Python,Tcl,Py2exe,我制作了一个slideshow.py文件,用Tkinter小部件显示一些照片校正,它在我的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:\

我制作了一个slideshow.py文件,用Tkinter小部件显示一些照片校正,它在我的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\u 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
然后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中的tcl8.5.11 以及C:\Python27\Tcl\tcl8.5中的tcl8.5.2 当我使用python运行时,它似乎在python安装路径中查找tcl,但py2exe在git安装路径中查找不同的副本

于是问题变成了: 1.如何在创建dist时将正确的tcl8.5副本“分配”到py2exe?
2.如何让生成的可执行文件知道dist中的tcl路径?用python安装路径中的tcl8.5、tk8.5、TL85.dll和tk85.dll手动替换tcl8.5、tk8.5、TL85.dll和tk85.dll来解决tcl版本8.5.11和8.5.2冲突,而不是“lib”或“library”

。 但是我仍然需要手动设置TCL_库和TK_库,我制作了一个windows批处理包装器test.bat:

set TCL_LIBRARY=.\tcl\tcl8.5\
set TK_LIBRARY=.\tcl\tk8.5\
slideshow.exe %1

这行得通,有更好的主意吗

正确的Tcl和Tk安装将在构建期间将这些环境变量的正确值烘焙到其中;它们的存在只是为了允许在安装之前进行测试(对于Tcl/Tk的开发人员非常有用,最好避免对其他人进行测试)。如果它们没有正确连接,或者找到了错误版本的脚本库,则说明您的安装存在严重问题。(请注意,这确实意味着您通常不应该在安装后移动东西,但这对大多数人来说不是什么大问题。)


在这种情况下,通常的建议是擦除Tcl和Tk安装并重新启动,确保通过
--prefix
选项为
配置
指定了正确的安装位置。我不知道将Python添加到混合中会产生怎样的影响。

这是一个很好的解决方案,但是有没有一个简单的解释来解释为什么py2exe会导致这种情况?这是虫子吗?有报道吗?
set TCL_LIBRARY=.\tcl\tcl8.5\
set TK_LIBRARY=.\tcl\tk8.5\
slideshow.exe %1