【问题标题】:Py2exe with TkinterPy2exe 与 Tkinter
【发布时间】:2010-10-19 00:01:56
【问题描述】:

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

【问题讨论】:

  • Win7 64 位上的 Python 2.6.4 的 py2exe 和 Python 3.1.2 的 cx_Freeze 都遇到了类似的问题。我发现生成的 dist 目录中没有包含 tcl 子目录(tcl8.5 和 tk8.5)。我将 Python26\tcl 中的两个目录分别复制到 dist\tcl8.6 和 dist\tk8.5,py2exe 生成的二进制文件停止抱怨缺少 tcl。我最终重新安装了 py2exe,问题消失了。现在重新安装 py2exe 后,tcl 目录现在位于 dist\tcl\tcl8.5 和 dist\tcl\tk8.5 下。

标签: python tkinter py2exe msvcrt


【解决方案1】:

对于您最初的问题,我不能说究竟是什么问题,但通常它有助于通过反复试验来猜测丢失的文件和目录。如果您知道自己缺少什么,请将它们添加到您的 packages(对于 python 模块)或 data_files(对于其他文件)。

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

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

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

【讨论】:

    【解决方案2】:

    我在virutalenv 网站上发现了一个错误,它提出了以下建议 https://github.com/pypa/virtualenv/issues/93

    适用于窗户 在您的目录“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

    当我遇到此错误时,它对我来说效果很好。

    【讨论】:

      【解决方案3】:

      py2exe 不适用于模块,我听说过一个名为 c_freeze 的模块,它显然适用于模块,试试看? http://cx-freeze.sourceforge.net/

      【讨论】:

        【解决方案4】:

        关于 MSVCR90.dll,请参阅这篇将其打包的帖子,并且可能不如让用户单独安装它。

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

        【讨论】:

          猜你喜欢
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-22
          • 2012-12-22
          • 1970-01-01
          • 1970-01-01
          • 2017-06-15
          相关资源
          最近更新 更多