2014-06-24 88 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,這樣可以節省很多麻煩。