我在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的任何错误消息的情况下我不知道是什么。
答案 0 :(得分:41)
我把它放在我的所有setup.py脚本中:
distutils.core.setup(
options = {
"py2exe": {
"dll_excludes": ["MSVCP90.dll"]
}
},
...
)
这使py2exe保持安静,但您仍需要确保dll在用户的计算机上。
答案 1 :(得分:40)
我发现如果我注释掉我使用wxPython的程序部分,py2exe就可以了。此外,当我使用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;因此,如果您的目标PC尚未安装Visual C ++ 2008,我建议您下载并安装Microsoft Visual C++ 2008 Redistributable Package。
答案 2 :(得分:9)
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/
答案 3 :(得分: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文件夹中。
我必须执行的技巧是在我的应用程序文件夹的根目录中包含一个清单和msvcr90.dll的附加副本,旁边是py2exe生成的可执行文件。 DLL的这个副本用于引导应用程序,但它似乎只查看libs文件夹。
希望这一发现可以帮助其他人。
另外,我有同样的问题让py2exe记录一个真正的错误信息。然后我意识到stderr没有被重定向到我的日志文件中。在您调用py2exe的命令行中添加“> build.log 2>& 1”。
答案 4 :(得分:6)
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
。
答案 5 :(得分:3)
仅为了您的信息,对我而言,它可以复制文件
Microsoft.VC90.CRT.manifest MSVCR90.DLL
进入用户计算机上的.exe目录(没有安装python或VC可再发行组件)。
感谢您提供的所有提示!
答案 6 :(得分:1)
输出显示您正在使用WX。尝试使用指定为GUI应用程序而非控制台的脚本运行py2exe。如果我没有弄错,那往往会导致py2exe出现问题。
答案 7 :(得分:1)
答案 8 :(得分:-1)
答案 9 :(得分:-1)
在我的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')
答案 10 :(得分:-2)
import sys
sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')