Python py2exe无法生成可执行文件

Python py2exe无法生成可执行文件,python,wxpython,py2exe,Python,Wxpython,Py2exe,我正在XP上使用python 2.6。我刚刚安装了py2exe,我可以从hello.py成功创建一个简单的hello.exe。但是,当我在实际程序中尝试使用py2exe时,py2exe会生成一些信息消息,但无法在dist文件夹中生成任何信息 我的setup.py如下所示: 来自distutils.core导入设置 导入py2exe 安装程序(控制台=['ServerManager.py']) py2exe输出如下所示: python setup.py py2exe 运行py2exe 正在创建C

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

我的setup.py如下所示:

来自distutils.core导入设置
导入py2exe
安装程序(控制台=['ServerManager.py'])
py2exe输出如下所示:

python setup.py py2exe
运行py2exe
正在创建C:\DevSource\Scripts\ServerManager\build
正在创建C:\DevSource\Scripts\ServerManager\build\bdist.win32
...
...
正在创建C:\DevSource\Scripts\ServerManager\dist
***搜索所需模块***
***解析结果***
正在为扩展名“wx.\u misc\”创建python加载程序(C:\Python26\lib\site packages\wx-2.8-msw-unicode\wx\\u misc.pyd->wx.\u misc.pyd)
正在为扩展名“lxml.etree”创建python加载程序(C:\Python26\lib\site packages\lxml\etree.pyd->lxml.etree.pyd)
...
...
正在为扩展“bz2”创建python加载程序(C:\Python26\DLLs\bz2.pyd->bz2.pyd)
***查找需要的DLL***
py2exe似乎已经找到了我的所有导入(尽管我有点惊讶地看到提到win32,因为我没有显式地导入它)。此外,我的程序使用以下命令启动时非常愉快:

python服务器管理器.py

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

输出显示您正在使用WX。尝试使用指定为GUI应用程序而不是控制台的脚本运行py2exe。如果我没有弄错的话,这可能会导致py2exe出现问题。

我发现,如果我注释掉程序中使用wxPython的部分,py2exe的工作就很好了。此外,当我在下载的“simple”示例(即在Python26\Lib\site packages\py2exe\samples\simple中)上使用py2exe时,会收到以下错误消息:

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory
因此,关于wxPython的某些内容使py2exe认为我需要一个VisualStudio2008 DLL。我没有VS2008,但我的程序作为Python模块的目录运行得非常好。我在网上找到了MSVCP90.DLL的副本,安装在Python26/DLL中,py2exe现在可以正常工作了

我仍然不明白这种依赖性是从哪里来的,因为我可以在没有py2exe的情况下完美地运行我的代码。py2exe没有像test_wx.py示例那样给我一条错误消息,这也让人恼火


进一步更新:当我试图在另一台PC上运行py2exe的输出时,我发现它需要安装MSVCR90.DLL;因此,如果你的目标PC还没有安装VisualC++ 2008,我建议你下载并安装.< /p> < p>我把它放在我所有的Stupp.Py脚本中:

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

这使py2exe保持安静,但您仍然需要确保dll位于用户的计算机上。

看起来这只是Python 2.6的一个依赖项。我在2.5版本下没有遇到这个错误,但是升级后我遇到了

import sys

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')
此电子邮件线程对问题存在的原因和解决方法有一定的背景知识:

我不想安装vcredist。我的应用程序目前不需要安装,可以由非管理员运行,这是我不想失去的行为。因此,我按照链接中的建议,通过“仅针对此用户”安装Python,获得了必要的Microsoft.VC90.CRT.manifest和msvcr90.dll。我还需要msvcp90.dll,它位于“所有用户”Python 2.6安装的WinSxS文件夹中。因为我已经有了三个中的两个,所以我加入了msvcm90.dll以防止将来出现错误,尽管我没有在忽略它时立即得到任何错误。我将清单和三个DLL放在冻结的应用程序使用的libs文件夹中

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

希望这个发现能帮助其他人


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

仅用于提供信息,对我来说,复制文件很有效

Microsoft.VC90.CRT.manifest msvcr90.dll

在用户机器上(没有安装python或VC可再发行版本)安装.exe的目录中


谢谢这里的提示

wxPython与此无关。在Python2.6之前,Python使用VisualStudio2003作为其Windows编译器。从2.6开始,他们切换到VisualStudio2008,在某些情况下需要清单文件。这已经有很好的记录。请参阅以下链接:

此外,如果要使用py2exe创建wxPython应用程序,则需要设置windows参数,而不是控制台参数。也许我的教程可以帮助您:

试试这个:

它对我有用

import sys

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2')
在每个窗口上,您都可以在
C:\\Windows\\WinSxS\\

在我的例子中,目录是:
x86\u microsoft.vc90.crt\u 1fc8b3b9ae18e3b\u 9.0.30729.4148\u none\u 5090ab56bcba71c2


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

wxPython wiki上有一些信息


在我的win8.1上,我找不到路径

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

相反,dll位于

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

XXX可能因您的电脑而异

您可以在路径中搜索,然后在setup.py中添加路径

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

如果py2exe真的没有更多的输出,那么这真的是一个非常奇怪的输出。通常它会告诉你