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