2014-06-24 65 views
0

我想将我的Python 3.4脚本编译成可执行文件以方便重新分发。我选择使用cxfreeze,因为它是支持Python 3。然而,在运行命令时,编译脚本,我收到以下错误屈指可数:CxFreeze Python编译错误

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不存在之外,这个错误是错误的。

UPDATE:

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不运行。

+0

这是[已知问题](https://bitbucket.org/anthony_tuininga/cx_freeze/issue/81/python-34-venv-importlib-attributeerror)。您可以从[本网站](http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze)下载cx_Freeze以避开它。 –

+0

谢谢。我看到它安装在C:\ Python34 \ Lib \ site-packages \ cx_Freeze中。但我该如何使用它?我是否运行冻结脚本? – Kyle

+0

安装完成后,使用setup.py脚本或cxfreeze命令以与之前相同的方式冻结应用程序。 –

回答

1

感谢Thomas K所有的努力工作和及时的回复,我们终于找到了问题所在。我确实需要与我的python安装相匹配的64位版本的cxfreeze。为了使Tkinter GUI工作,需要将

root.mainloop() 

添加到您的python文件的底部(如果您还没有)。

1

该响应适用于Windows 7 64位机器上的Python 3.4。

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

在重新安装之前,我还安装了pywin32。我删除它,但没有重新安装它。我不知道这是否有助于解决我的问题(无论如何,我现在不需要)。

0

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

我发现的问题与Python 3.6和cxFreeze新版

下载的Python 3.6 32位,并能很好地工作最新版本的cxFreeze。

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

有时候为了向后兼容,我必须使用旧版本的Python,这样可以节省很多麻烦。