2008-11-27 171 views
51

我在XP上使用python 2.6。我剛剛安裝了py2exe,並且我可以從hello.py成功創建一個簡單的hello.exe。但是,當我嘗試在我的真實程序中使用py2exe時,py2exe會生成一些信息消息,但無法在dist文件夾中生成任何內容。py2exe無法生成可執行文件

我setup.py看起來是這樣的:

from distutils.core import setup 
import py2exe 

setup(console=['ServerManager.py']) 

和py2exe輸出看起來是這樣的:

python setup.py py2exe 
running py2exe 
creating C:\DevSource\Scripts\ServerManager\build 
creating C:\DevSource\Scripts\ServerManager\build\bdist.win32 
    ... 
    ... 
creating C:\DevSource\Scripts\ServerManager\dist 
*** searching for required modules *** 
*** parsing results *** 
creating python loader for extension 'wx._misc_' (C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd) 
creating python loader for extension 'lxml.etree' (C:\Python26\lib\site-packages\lxml\etree.pyd -> lxml.etree.pyd) 
    ... 
    ... 
creating python loader for extension 'bz2' (C:\Python26\DLLs\bz2.pyd -> bz2.pyd) 
*** finding dlls needed *** 

py2exe似乎已經找到了我的所有進口(雖然我有點驚訝看到win32提到,因爲我沒有明確導入它)。另外,我的程序與此命令很樂意啓動:

python ServerManager.py 

顯然,我做的事根本錯誤的,但在沒有從py2exe任何錯誤消息的我不知道。

+0

如果實在沒有更多的產出,從py2exe添加路徑,這是一個非常奇怪的一個。通常它會告訴你爲什麼失敗。最好的我可以說是你讀過所有這些:http://www.py2exe.org/index.cgi/Py2exeAndwxPython – 2008-11-27 11:11:45

+0

查爾斯:我經常檢查這個,對這個解決方案很感興趣。如果你想出來,請回復。謝謝。 – 2008-11-27 22:47:17

回答

40

我發現py2exe工作得很好,如果我註釋掉我的程序使用wxPython的部分。此外,當我使用py2exe的「簡單」的樣品隨其下載(即在Python26 \ LIB \站點包\ py2exe \樣本\簡單),我收到此錯誤信息:

*** finding dlls needed *** 
error: MSVCP90.dll: No such file or directory 

因此,一些關於wxPython使py2exe認爲我需要一個Visual Studio 2008 DLL。我沒有VS2008,但是我的程序作爲Python模塊的目錄很好。我在網上找到了MSVCP90.DLL的副本,將它安裝在Python26/DLL中,現在py2exe可以正常工作。

我還是不明白這個依賴來自哪裏,因爲我可以完美運行我的代碼,沒有py2exe。這也令人討厭,py2exe沒有給我一個像test_wx.py樣本一樣的錯誤消息。

進一步更新:當我試圖在另一臺PC上運行py2exe的輸出時,我發現它需要安裝MSVCR90.DLL;所以如果你的目標電腦沒有安裝Visual C++ 2008,我建議你下載並安裝Microsoft Visual C++ 2008 Redistributable Package

+0

我有同樣的問題,並應用您的解決方案,它的工作完美。感謝分享! – 2008-12-08 12:18:48

+4

我有與PyQt4應用程序相同的問題。下載DLL幫助,謝謝! – kender 2009-03-29 05:30:42

+6

鏈接到msvcp90.dll - http://www.dll-files.com/dllindex/dll-files.shtml?msvcp90 – 2010-01-09 21:06:17

1

輸出顯示您正在使用WX。嘗試使用指定爲GUI應用程序而不是控制檯的腳本運行py2exe。如果我沒有弄錯,那會導致py2exe出現問題。

+0

好吧,我setup.py現在看起來是這樣的: 從distutils.core進口設置 進口py2exe 設置(窗口= [{ 「腳本」: 'ServerManager.py'}]) 但都沒有效果。 但是,我已經證明wxPython導致了這個問題。如果我不導入wx,py2exe可以很好地工作。 – 2008-11-28 09:32:54

+0

正在下載MSVCR90.DLL並將其複製到Python26/DLLs爲我工作! – Alex 2009-08-12 15:15:59

40

我把這個在我所有的setup.py腳本:

distutils.core.setup(
    options = { 
     "py2exe": { 
      "dll_excludes": ["MSVCP90.dll"] 
     } 
    }, 
    ... 
) 

這樣可以使py2exe安靜,但你仍然需要確保該DLL在用戶的機器上。

-2
import sys 

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT') 
6

看起來這只是Python 2.6的一個依賴項。我沒有得到2.5以下的這個錯誤,但升級後,我。

此電子郵件線程都有一個爲什麼存在問題,以及如何解決它的一些背景:
http://www.nabble.com/py2exe,-Py26,-wxPython-and-dll-td20556399.html

我不希望有安裝vcredist。我的應用程序目前不需要安裝,可以由非管理員運行,這是我不想失去的行爲。所以我遵循鏈接中的建議,通過安裝Python「僅限該用戶」獲得必要的Microsoft.VC90.CRT.manifest和msvcr90.dll。我還需要在「所有用戶」Python 2.6安裝的WinSxS文件夾中找到msvcp90.dll。由於我已經有了三個中的兩個,所以我包含了msvcm90.dll以防止將來的錯誤,儘管我沒有在我離開時立即發現錯誤。我將清單和三個DLL放在我的冷凍應用程序使用的libs文件夾中。

我必須執行的技巧是在py2exe生成的可執行文件旁邊的應用程序文件夾的根目錄中添加清單和msvcr90.dll的附加副本。這個DLL的副本用於引導應用程序,但它看起來只能看到libs文件夾。

希望這個發現可以幫助別人。

此外,我有與py2exe日誌真正的錯誤消息相同的問題。然後我意識到stderr沒有被重定向到我的日誌文件中。在調用py2exe的命令行上添加「> build.log 2> & 1」。

3

只是爲了您的信息,對我來說它的工作的文件

Microsoft.VC90.CRT.manifest MSVCR90.DLL

複製到用戶的計算機上的.exe文件的目錄(誰擁有沒有安裝Python或VC可再發行組件)。

感謝您的所有提示!

10

wxPython與它無關。在Python 2.6之前,Python使用Visual Studio 2003作爲Windows編譯器。從2.6開始,他們切換到Visual Studio 2008,在某些情況下需要清單文件。這已被充分記錄。請訪問以下鏈接:

http://wiki.wxpython.org/py2exe

http://py2exe.org/index.cgi/Tutorial#Step52

此外,如果您要創建與py2exe一個wxPython應用程序,那麼你要設置的窗口參數,而不是控制檯之一。也許我的教程將幫助您:

http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/

6
import sys 

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2') 

在每個Windows,你可以找到該文件MSVCP90.dllC:\\WINDOWS\\WinSxS\\一些子目錄

在我的情況下,目錄是:x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2

轉到C:\\WINDOWS\\WinSxS\\並使用windows文件搜索找到MSVCP90.dll

-1

在我的win8的。1,我沒有找到路徑

C:/ Program Files文件/微軟的Visual Studio 9.0/VC/REDIST/86/Microsoft.VC90.CRT

相反,找到該dll在

C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX

的XXX可以根據您的PC改變

您可以在路徑中搜索,然後在你的setup.py

import sys 
sys.path.append('C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX')