我制作了一个单独的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_wa \ utils \ tfps \和“tcl”,“library.zip”,“幻灯片放映”中生成一个“dist”文件夹。 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 和Tcl 8.5.2在C:\ Python27 \ tcl \ tcl8.5中 看来当我运行python时,它在python安装路径中查找tcl,但是py2exe在git安装路径中看起来是不同的副本。
那么问题就变成了: 1.如何在创建dist时将正确的tcl8.5副本“赋值”给py2exe? 2.如何让生成的可执行文件知道dist中的tcl路径? “tcl”而不是“lib”或“library”
答案 0 :(得分:6)
Tcl版本8.5.11&amp; 8.5.2冲突解决了用python安装路径手动替换tcl8.5,tk8.5,tcl85.dll和tk85.dll,我相信它也可以通过改变路径环境变量来解决。 但是我还是要手动设置TCL_LIBRARY和TK_LIBRARY,我做了一个windows批处理包装test.bat:
set TCL_LIBRARY=.\tcl\tcl8.5\
set TK_LIBRARY=.\tcl\tk8.5\
slideshow.exe %1
这有用吗,有什么更好的想法吗?
答案 1 :(得分:2)
正确的Tcl和Tk安装将在构建期间将正确的值添加到其中;它们只是存在才允许在安装之前进行测试(对Tcl / Tk的开发人员非常有用,对其他人来说最好避免)。如果它们没有正确连接,或者找不到错误版本的脚本库,那么安装就会出现严重问题。 (请注意,这确实意味着您通常不应该在安装后移动东西,但对大多数人来说这不是太大的问题。)
在这种情况下,通常的建议是擦除Tcl和Tk安装并重新启动,确保通过configure
选项为--prefix
指定了正确的安装位置。我不知道如何在混合中添加Python会影响事物。