【问题标题】:How to correct TCL_LIBRARY and TK_LIBRARY with py2exe如何使用 py2exe 更正 TCL_LIBRARY 和 TK_LIBRARY
【发布时间】:2012-09-26 09:11:04
【问题描述】:

我用 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路径? “tcl”而不是“lib”或“库”

【问题讨论】:

    标签: python tcl py2exe


    【解决方案1】:

    Tcl 版本 8.5.11 & 8.5.2 冲突通过手动替换 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
    

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

    【讨论】:

    • 一个很好的解决方案,但是对于py2exe为什么会导致这个问题有一个简单的解释吗?这是一个错误吗?有报道吗?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多