2015-06-07 120 views
2

我有一個python(2.7)代碼,它有一個gui(Tkinter)和另一個模塊。我試圖讓它成爲一個.exe文件,但有奇怪的結果。以下是兩種情況:py2exe exe在發佈後立即關閉

  1. 沒有名爲py2exe的模塊:我使用Canopy 64位製作python腳本。由於它是64位,我下載了py2exe的64位版本for python 2.7並安裝。在安裝過程中,py2exe安裝程序會自動查看我的頂蓋路徑,並在安裝後檢查是否安裝了py2exe模塊。我檢查並看到py2exe文件夾和模塊在Canopy/Libs中。所以它看起來像是正確安裝的,但是當我進入cmd時,更改目錄,然後python myscript.py py2exe,它表示no module named py2exe。如果我啓動64位IDLE和import py2exe,它會導入。

  2. 所以我嘗試安裝py2exe的32位版本。在安裝期間,它會看到C:/ Python27,所以我將它安裝在那裏,如果我調用py2exe,但是32位可以,則64位IDLE無法導入。當我執行python myscript.py py2exe時,使用32位版本的py2exe,它將我的腳本編譯爲一個.exe文件。但是,當我雙擊.exe文件時,cmd窗口將在打開後立即打開並關閉。

我已經檢查過其他類似的主題,但沒有人幫助過我,因爲64位安裝不提供名爲py2exe的模塊,這很奇怪。任何幫助將不勝感激,在此先感謝。

注意:我的系統變量路徑中有C:/ Python27,我的用戶變量路徑中有Canopy路徑。

更新情況1:當我開始樹冠命令提示符和CD從那裏,然後按照一般步驟,py2exe開始運行,但卡在:MSVCP90.dll: No such file or directory,並退出

更新:原來這是關於我的進口。問題僅在導入matplotlib時發生。與Tkinter,xlrd和numpy導入,它的工作原理沒有問題,但是當我導入matplotlib,它給了我關於msvcp90.dll的錯誤。如果我從我的gui中刪除所有matplotlib導入,它會編譯,但是當我嘗試啓動.exe時,它會啓動一個cmd窗口,該窗口立即關閉。

+0

也許與[沒有名爲py2exe的模塊](https://stackoverflow.com/questions/9559601/no-module-named-py2exe?rq=1)相關。看到並告訴我們你的py2exe軟件包的版本是什麼? – smci

+0

午餐後我也一樣。 – percusse

+0

首先,嘗試通過cmd控制檯運行.exe文件,而不是雙擊它。這樣,cmd窗口不會消失,您將能夠看到它拋出的錯誤,然後發佈。那麼我們將能夠更好地幫助你。 –

回答

0

AFAIK,py2exe留下了一些DLL。它們應該手動複製到您的dist目錄中。我會建議通過Dependency Walker來運行你的編譯來找出缺少的Dll。

http://www.dependencywalker.com/

5.2。 Python 2.6,2.7,3.0,3.1

對於Python 2.6,您需要的DLL稱爲MSVCR90.dll。 Py2exe不是 能夠自動將這個DLL包含在你的dist目錄中,所以你必須自己提供它 。

使事情複雜化,存在多個版本的此DLL在 存在,每個具有相同的文件名。您需要與編譯Python解釋器 相同的版本,它是版本 9.0.21022.8。通過這些說明的其餘部分,將鼠標懸停在dll文件(或vcredist_x86.exe安裝程序可執行文件) 上以確認您擁有哪個版本。你需要vcredist_x86。包含2007年11月29日發佈的Microsoft Visual C++ 2008可重新發布包 ,因此不包括VS2008 SP1(使用Python 2.7.1進行測試)的EXE 。

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

+0

我下載並安裝了該版本的vcredist_x86.exe,並且py2exe教程告訴我放置一些選項,以便py2exe可以分發這些dll。它告訴我添加的數據文件選項看起來像data_files = [(「Microsoft.VC90.CRT」,glob(r'C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ redist \ x86 \ Microsoft.VC90.CRT \ *。*'))],而我在Program Files下沒有這樣的目錄。我有Visual Studio 8目錄,但不是9.0。我完全被卡住了。感謝您的回答,我會很感激這裏的任何幫助。 – Deniz

+0

抱歉的雙後,但py2exe說我應該有我的視覺工作室文件夾中的這些DLL的副本,如果我有權重新分配他們。我在Microsoft Visual Studio 8下的程序文件(x86)中有一個VC文件夾,但它沒有這些DLL的副本,即使我已經安裝了vcredist_x86 – Deniz

0

嘗試使用下面的 'setup.py' 代碼。您排除導致錯誤的dll文件,並且您還必須導入sip模塊。

從distutils.core進口設置 進口py2exe

setup(console=['hello.py'], 
    options = { 
      "py2exe": { 
       "dll_excludes": ["MSVCP90.dll"], 
       "includes":["sip"] 
      } 
     }, 
) 

爲了看看有什麼問題,從終端上運行的exe文件。