当前位置:  开发笔记 > 编程语言 > 正文

py2exe无法生成可执行文件

如何解决《py2exe无法生成可执行文件》经验,为你挑选了5个好方法。

我在XP上使用python 2.6.我刚刚安装了py2exe,我可以从hello.py成功创建一个简单的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似乎找到了我的所有导入(虽然我有点惊讶看到win32提到,因为我没有明确导入它).此外,我的程序使用此命令非常愉快地启动:

python ServerManager.py

显然我正在做一些根本错误的事情,但是在没有来自py2exe的任何错误消息的情况下我不知道是什么.



1> 小智..:

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

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

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


+1:这个答案实际上是原始问题的唯一正确答案,它在使用py2exe构建*期间报告了问题*.这是真的(正如Charles自己的回答中所指出的那样)你仍然需要DLL在目标机器上,但假设你已经处理了这个并且你仍然在构建机器上得到这个错误(就像我刚才那样)Bill的回答以上很好地关闭py2exe并让你的构建完成.

2> Charles Ande..:

我发现如果我注释掉我使用wxPython的程序部分,py2exe就可以了.此外,当我在其下载附带的"简单"示例(即在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模块的目录.我在网上找到了MSVCP90.DLL的副本,将它安装在Python26/DLL中,py2exe现在工作正常.

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

进一步更新:当我尝试在另一台PC上运行py2exe的输出时,我发现它需要安装MSVCR90.DLL; 因此,如果您的目标PC尚未安装Visual C++ 2008,我建议您下载并安装Microsoft Visual C++ 2008 Redistributable Package.


链接到msvcp90.dll - http://www.dll-files.com/dllindex/dll-files.shtml?msvcp90
我和PyQt4应用程序有同样的问题.下载DLL有帮助,谢谢!
太棒了,但究竟是什么造成了这种依赖?
MSVCP90.dll也可以在[官方微软软件包]中找到(http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en)(x86) .*可能*必须将此软件包部署到运行此应用程序的所有计算机上!

3> Mike Driscol..:

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应用程序,则需要设置windows参数,而不是控制台参数.也许我的教程会帮助你:

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



4> resplin..:

看起来这只是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文件夹中.

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

希望这一发现可以帮助其他人.

另外,我有同样的问题让py2exe记录一个真正的错误消息.然后我意识到stderr没有被重定向到我的日志文件中.在调用py2exe的命令行中添加"> build.log 2>&1".


我说你还聪明.也许它不适用于使用SQLite的应用程序,但我尝试了将3个dll和清单文件添加到运行时目录的技巧.这使得我相当简单的Python26/py2exe应用程序能够正常运行而不会出现错误,并且无需在机器上安装vc_redist(Win2003服务器),我无法在客户端的计算机上执行此操作.沃纳F. Bruhin这里对这个简单的解决方案的详细信息:http://sourceforge.net/mailarchive/message.php?msg_name=hlav67%24627%241%40ger.gmane.org

5> 小智..:
import sys

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

在每个Windows上,您都可以MSVCP90.dll在某个子目录中找到该文件C:\\WINDOWS\\WinSxS\\

就我而言,目录是:x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

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

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有