Py2exe与Tkinter

时间:2010-10-19 00:01:56

标签: python tkinter py2exe msvcrt

我正在尝试使用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。

4 个答案:

答案 0 :(得分:2)

对于您的原始问题,我不能说完全问题是什么,但通常它有助于尝试错误来猜测丢失的文件和目录。如果您知道自己缺少什么,请将它们添加到packages(对于python模块)或data_files(对于其他文件)。

第二个问题是某些c-modules(和python本身)的结果是使用MS Visual Studio构建的,因此依赖于MS Visual C ++ 9.0(2008)运行时。您可以通过以下任一方式解决此问题:

  • 拥有Visual Studio的副本(Express Edition不计算在内),因此您可以重新分发MSVCR依赖项(在您禁止用户重新生成依赖项部分的情况下)

  • 指出您的用户下载了Microsoft的MS Visual C++ 2008 Redistributable软件包。

答案 1 :(得分:1)

我在virutalenv网站上发现了一个错误,提示如下 https://github.com/pypa/virtualenv/issues/93

用于Windows 在您的目录“C:\ Environments \ VirtualEnv \ Scripts \ activate.bat”中 只需添加设置为您的python版本的TCL和TK的正确路径

set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
set "TK_LIBRARY=C:\Python27\tcl\tk8.5"

并重新启动cmd或shell

当我遇到这个错误时,它对我很有用。

答案 2 :(得分:0)

py2exe不能用于模块,我听说过一个名为c_freeze,显然可以使用模块,试试吗? http://cx-freeze.sourceforge.net/

答案 3 :(得分:0)

关于 MSVCR90.dll ,请参阅此帖子打包它,可能不如让用户单独安装它。

此外,该帖子中的具体问题是我的,我仍然不明白根本原因。也就是说,一个完整的卸载python和干净的重建工作很棒...也许这也是你的问题。 py2exe gives RuntimeError: Too early to create image