CxFreeze Python 编译错误

0 投票
3 回答
2325 浏览
提问于 2025-04-18 10:54

我正在尝试把我的Python 3.4脚本编译成一个可执行文件,这样方便分享给别人。我选择使用cxfreeze,因为它是少数支持Python 3的工具之一。不过,当我运行编译脚本的命令时,出现了以下错误:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27
, in <module>
    exec(code, m.__dict__)
  File "C:\Users\kylec\Desktop\DataMotion\Python\MailChecker.py", line 1, in <mo
dule>
    from tkinter import *
  File "c:\Python\64-bit\3.4\lib\importlib\_bootstrap.py", line 2214, in _find_a
nd_load
  File "c:\Python\64-bit\3.4\lib\importlib\_bootstrap.py", line 2203, in _find_a
nd_load_unlocked
  File "c:\Python\64-bit\3.4\lib\importlib\_bootstrap.py", line 1191, in _load_u
nlocked
  File "c:\Python\64-bit\3.4\lib\importlib\_bootstrap.py", line 1161, in _load_b
ackward_compatible
AttributeError: 'module' object has no attribute '_fix_up_module'

但是,我不太明白问题出在哪里,只知道它在抱怨说找不到_fix_up_module。

更新:

Traceback (most recent call last):
  File "cxfreeze", line 5, in <module>
    main()
  File "C:\Python34\lib\site-packages\cx_Freeze\main.py", line 187, in main
    silent = options.silent)
  File "C:\Python34\lib\site-packages\cx_Freeze\freezer.py", line 130, in __init
__
    for n in self._GetDefaultBinPathExcludes() + binPathExcludes]
  File "C:\Python34\lib\site-packages\cx_Freeze\freezer.py", line 270, in _GetDe
faultBinPathExcludes
    import cx_Freeze.util
ImportError: DLL load failed: %1 is not a valid Win32 application.

很多其他的问答建议使用32位版本的cxfreeze。但我下载的是这个:cx_Freeze‑4.3.3.win32‑py3.4.exe。

如果我使用64位的cxfreeze进行编译,就没有错误了。但是,生成的exe文件却无法运行。

3 个回答

0

补充一下@DigitalSage的回答(他的回答非常好!)

我发现Python 3.6和新版本的cxFreeze有些问题。

下载32位的Python 3.6,应该可以和最新版本的cxFreeze正常工作。

另外,建议你看看virtualenv,这个工具可以让你在电脑上创建多个不同的Python环境,方便你使用。这样可以避免使用PATH变量,防止你的安装出现问题。

有时候我需要使用旧版本的Python来保持兼容性,这样可以省去很多麻烦。

1

这个回答是关于在Windows 7 64位电脑上使用Python 3.4的。

在我的情况下,我的电脑上同时安装了32位和64位的Python和cx_Freeze。为了解决这个问题,我彻底卸载了cx_Freeze和Python,然后重新安装了这两个软件,确保下载和安装的是正确的64位版本。

在重新安装之前,我还安装了pywin32。我把它卸载了,但没有重新安装。我不知道这是否导致了我的问题(反正我现在也不需要它)。

1

感谢Thomas K的辛勤工作和及时的回复,我们终于找到了问题所在。确实,我需要一个和我的Python安装版本匹配的64位cxfreeze。为了让Tkinter的图形界面正常工作,如果你还没有的话,需要在你的Python文件底部添加

root.mainloop()

这段代码。

撰写回答