py2exe无法生成可执行文件

我在XP上使用python 2.6。 我刚刚安装了py2exe,我可以成功地从hello.py创build一个简单的hello.exe。 但是,当我尝试在我的真实程序中使用py2exe时,py2exe会生成一些信息消息,但无法在dist文件夹中生成任何内容。

我的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似乎已经find我所有的import(虽然我有点惊讶,看到win32提到,因为我没有明确导入)。 另外,我的程序用这个命令很开心:

 python ServerManager.py 

很明显,我正在做一些根本性的错误,但在没有任何来自py2exe的错误消息,我不知道是什么。

我把它放在我所有的setup.py脚本中:

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

这使py2exe保持安静,但你仍然需要确保该DLL在用户的机器上。

我发现py2exe工作得很好,如果我注释掉我的程序使用wxPython的部分。 另外,当我使用下载的简单样例(例如在Python26 \ Lib \ site-packages \ py2exe \ samples \ simple)中使用py2exe时,出现以下错误消息:

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

所以关于wxPython的一些东西让py2exe认为我需要一个Visual Studio 2008 DLL。 我没有VS2008,但是我的程序可以很好地作为Python模块的目录。 我在网上find了MSVCP90.DLL的一个副本,安装在Python26 / DLL中,现在py2exe工作正常。

我仍然不明白这个依赖是从哪里来的,因为我可以在没有py2exe的情况下完全运行我的代码。 这也令人讨厌,py2exe没有给我一个像test_wx.py样本一样的错误信息。

进一步更新:当我试图在另一台PC上运行py2exe的输出时,我发现它需要安装MSVCR90.DLL; 所以如果您的目标电脑没有安装Visual C ++ 2008,我build议您下载并安装Microsoft Visual C ++ 2008 Redistributable Package 。

wxPython与它无关。 在Python 2.6之前,Python使用Visual Studio 2003作为Windows编译器。 从2.6开始,他们切换到Visual Studio 2008,在某些情况下需要清单文件。 这已被logging在案。 请参阅以下链接:

http://wiki.wxpython.org/py2exe

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

另外,如果你正在用py2exe创build一个wxPython应用程序,那么你需要设置windows参数,而不是控制台参数。 也许我的教程将帮助你:

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

看起来这只是Python 2.6的一个依赖。 我没有得到2.5以下的这个错误,但升级后,我。

这个电子邮件线索有一些背景为什么问题存在和如何解决它:
http://www.nabble.com/py2exe,-Py26,-wxPython-and-dll-td20556399.html

我不想安装vcredist。 我的应用程序目前不需要安装,可以由非pipe理员运行,这是我不想失去的行为。 所以我遵循链接中的build议,并通过安装Python“仅限该用户”获得必要的Microsoft.VC90.CRT.manifest和msvcr90.dll。 我还需要在“所有用户”Python 2.6安装的WinSxS文件夹中findmsvcp90.dll。 由于我已经有三个,我包括msvcm90.dll,以防止将来的错误,虽然我没有得到任何即时的错误,当我离开它。 我把清单和三个DLL放在我的冷冻应用程序使用的libs文件夹中。

我必须执行的技巧是在py2exe生成的可执行文件旁边的应用程序文件夹的根目录中添加清单和msvcr90.dll的附加副本。 这个DLL的副本用于引导应用程序,但它看起来只在libs文件夹中查找。

希望这个发现可以帮助别人。

此外,我有同样的问题有py2exe日志一个真正的错误信息。 然后我意识到stderr没有被redirect到我的日志文件中。 在调用py2exe的命令行上添加“> build.log 2>&1”。

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

在每个Windows上,都可以在C:\\WINDOWS\\WinSxS\\

在我的情况下,目录是: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2

转到C:\\WINDOWS\\WinSxS\\并使用Windows文件search来查找MSVCP90.dll

只是为了您的信息,对我来说,它的工作是复制文件

Microsoft.VC90.CRT.manifest msvcr90.dll

到用户机器上的.exe目录(没有安装Python或VC可再发行组件)。

感谢这里的所有提示!

输出说你正在使用WX。 尝试使用指定为GUI应用程序而不是控制台的脚本来运行py2exe。 如果我没有弄错,这往往会导致py2exe的问题。

试试这个: http : //www.py2exe.org/index.cgi/Tutorial#Step52

它为我工作

有一些关于wxPython wiki的信息。

部署一个Python应用程序

py2exe与wxPython和Python 2.6

在我的win8.1上,我找不到path

c:/ Program Files / Microsoft Visual Studio 9.0 / VC / redist / x86 / Microsoft.VC90.CRT

相反,dll被find了

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

XXX可能因您的电脑而异

您可以在path中search,然后在setup.py中添加path

 import sys sys.path.append('C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX') 
 import sys sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')