Py2exe与Tkinter配合使用

4

我正在尝试使用py2exe将一个基本的tkinter GUI程序转换为.exe。但是,当我使用以下转换脚本时遇到了错误。

# C:\Python26\test_hello_con.py py2exe

from distutils.core import setup
import py2exe

setup(windows=[r'C:\Python26\py2exe_test_tk.py'])

C:\Python26\py2exe_test_tk.py是以下代码

import Tkinter as tk

root = tk.Tk()
root.title("Test")


label1 = tk.Label(root,text="Hello!",font=('arial', 10, 'bold'), bg='lightblue')
label1.pack(ipadx=100, ipady=100)


root.mainloop()

当我尝试运行新创建的 .exe 文件时,出现了以下错误:

Traceback (most recent call last):
  File "py2exe_test_tk.py", line 4, in <module>
  File "Tkinter.pyc", line 1643, in __init__
_tkinter.TclError: Can't find a usable init.tcl in the following directories: 
    {C:/Users/My_Name/lib/tcl8.5} {C:/Users/My_Name/lib/tcl8.5} C:/Users/lib/tcl8.5 {C:/Users/My_Name/library} C:/Users/library C:/Users/tcl8.5.8/library C:/tcl8.5.8/library



This probably means that Tcl wasn't installed properly.

我相信问题出在我的转换脚本中。我漏掉了什么?或者有人能提供一个tkinter GUI程序的转换脚本示例吗?另外,是否可以将输出.exe文件定向到我的桌面?
编辑:错误报告显示我缺少{C:/Users/My_name/lib/tcl8.5}中的init.tcl。所以我创建了该目录并在那里放了一份init.tcl的副本。现在,当我尝试运行.exe时,它指出我的计算机缺少MSVCR90.dll,并且需要运行我的程序。
另外,这是在Windows 7上使用Python 2.6.5。

2
我曾在Win7 64位系统上使用Python2.6.4的py2exe和Python3.1.2的cx_Freeze遇到了类似的问题。我发现生成的dist目录中没有包含tcl子目录(tcl8.5和tk8.5)。于是我将Python26\tcl中的这两个目录复制到了dist\tcl8.6和dist\tk8.5中,然后py2exe生成的二进制文件就不再抱怨缺少tcl了。最终我重新安装了py2exe,问题也消失了。现在重新安装后,tcl目录现在位于dist\tcl\tcl8.5和dist\tcl\tk8.5下。 - T.P.
4个回答

2

对于您的原始问题,我无法确定问题具体是什么,但通常试错可以帮助猜测缺失文件和目录。如果您知道所缺少的内容,请将其添加到您的packages(用于Python模块)或data_files(用于其他文件)中。

第二个问题是由于一些C模块(和Python本身)使用MS Visual Studio构建,因此有一个依赖于MS Visual C++ 9.0(2008)运行时的问题。您可以通过以下方式解决:

  • 拥有Visual Studio的副本(Express Edition不算),以便您可以重新分发MSVCR依赖项(在禁止用户重新工程等依赖部分的条件下)

  • 将您的用户指向Microsoft的MS Visual C++ 2008可再发行包下载链接。


1
我在 virutalenv 网站上发现了一个 bug,建议如下操作: https://github.com/pypa/virtualenv/issues/93 对于 Windows 系统,在目录 "C:\Environments\VirtualEnv\Scripts\activate.bat" 中,只需添加正确路径指向 TCL 和 TK 的设置即可。
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
set "TK_LIBRARY=C:\Python27\tcl\tk8.5"

并重新启动您的 cmd 或 shell

当我遇到这个错误时,这对我非常有效。


0
关于MSVCR90.dll,请参考此帖子,其中打包了它,但可能不如让用户单独安装好。此外,那篇文章中的具体问题是我的,我仍然不明白根本原因。话虽如此,完全卸载Python并进行清洁重建效果很好...也许这也是你的问题。py2exe gives RuntimeError: Too early to create image

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接