Cx_Freeze Python编译错误

时间:2014-06-24 15:34:31

标签: python cx-freeze

我正在尝试将我的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.

许多其他Q / A建议使用32位版本的cxfreeze。但是我下载了这个:cx_Freeze-4.3.3.win32-py3.4.exe

如果我使用cxfreeze 64位编译,我没有错误。但是,结果exe不会运行。

3 个答案:

答案 0 :(得分:1)

感谢Thomas K的辛勤工作和及时的回复,我们终于找到了问题所在。我确实需要与我的python安装匹配的64位版本的cxfreeze。要使Tkinter gui工作,需要添加

root.mainloop()
如果你还没有,那么

到python文件的底部。

答案 1 :(得分:1)

此响应适用于Windows 7 64位计算机上的Python 3.4。

就我而言,我混合了32位和64位版本的Python和cx_Freeze。为了解决这个问题,我完全卸载了cx_Freeze和Python并重新安装了两者,注意确保我下载并安装了适当的64位版本。

在重新安装之前,我也安装了pywin32。我删除了它但没有重新安装它。我不知道是否有牵手引起我的问​​题(我现在不需要它,无论如何)。

答案 2 :(得分:0)

添加到@DigitalSage答案(这非常好!)

我发现了Python 3.6和cxFreeze的新版本

的问题

下载Python 3.6 32位,它应该可以与最新版本的cxFreeze一起使用。

另一个好主意是查看 virtualenv,您可以在机器上使用许多不同的python环境。它可以节省您使用PATH变量并可能破坏您的安装。

有时候我必须使用旧版本的Python来实现向后兼容性,这给我带来了很多麻烦。