如何将Python 2.7(使用Tkinter)项目转换为独立exe?

1 投票
3 回答
4341 浏览
提问于 2025-04-17 02:30

我搜索了很久,试了很多方法,就是无法让它正常工作。

我想做的是把我用Tkinter写的小程序打包成一个独立的exe文件,适用于Windows。到目前为止,我已经成功把它做成exe文件了,不过生成的dist/文件夹里有一个tcl/文件夹,还有一个额外的exe文件。我想知道怎么去掉这些东西。

另外,我还没能做出一个能正常运行的exe文件。这是我的setup.py文件:

from distutils.core import setup
import py2exe
import sys
if len(sys.argv) == 1:
    sys.argv.append("py2exe")

setup(
    options = {
        "py2exe": {"compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 1, "includes": ["Tkinter"]}
        },
        zipfile = None,
        windows = [
        {
            "script": "hello.py",
            "icon_resources": [(0, "icon_16.ico")]
        }
    ]
)

用这段代码运行后,我立刻就收到一个提示:“这个程序已经停止响应”。

如果我去掉“ascii”这个选项,程序就无法运行,还会留下一个日志文件:

Traceback (most recent call last):
  File "hello.py", line 1, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "Tkinter.pyo", line 38, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "FixTk.pyo", line 56, in <module>
  File "FixTk.pyo", line 23, in convert_path
LookupError: unknown encoding: mbcs

我对Python非常乐观,因为它看起来很容易上手,也能找到很多帮助,但现在我遇到的问题让我觉得无从下手。任何帮助都非常感谢。我还是个完全的新手。

3 个回答

0

你可以试试下面这个地方提供的另一种解决方案,基本上是用安装程序的方法。我也没能把那个tcl文件夹打包进exe文件里,所以我觉得这个方法应该更好。

http://www.py2exe.org/index.cgi/SingleFileExecutable

0

在“tcl”文件夹里的东西是Tkinter所需要的。Tkinter其实是和一个Tcl解释器连接在一起的(这意味着你可以在Python中运行Tcl命令!)。所以,你需要Tcl解释器所需的所有东西(包括对Tk的支持)。

你遇到的错误是编码错误,我看到你的选项里有"ascii": 1。把这个去掉,问题应该就能解决了。

另外,如果你打算为这个编译好的程序制作安装包,其实没有必要用"compressed": 1来压缩程序(它只在分发时需要小巧一些)。

0

我觉得在打包tkinter的时候有个问题,你不能对tkinter进行优化或者打包,去掉那些选项然后试着运行一下吧。

撰写回答