python 生成可执行文件_python-py2exe无法生成可执行文件

python-py2exe无法生成可执行文件

我在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的任何错误消息的情况下,我也不知道该怎么办。

11个解决方案

41 votes

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

distutils.core.setup(

options = {

"py2exe": {

"dll_excludes": ["MSVCP90.dll"]

}

},

...

)

这样可以使py2exe保持安静,但是您仍然需要确保dll在用户计算机上。

answered 2020-01-18T23:37:55Z

40 votes

我发现,如果我注释掉使用wxPython的程序部分,则py2exe可以正常工作。 另外,当我在其下载随附的``简单''示例上使用py2exe时(即在Python26 \ Lib \ site-packages \ py2exe \ samples \ simple中),我收到此错误消息:

*** 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。

Charles Anderson answered 2020-01-18T23:38:30Z

9 votes

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/]

Mike Driscoll answered 2020-01-18T23:39:08Z

6 votes

看起来这只是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”。

resplin answered 2020-01-18T23:39:57Z

6 votes

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\\

在我的情况下,目录为:C:\\WINDOWS\\WinSxS\\。

转到C:\\WINDOWS\\WinSxS\\,然后使用Windows文件搜索找到MSVCP90.dll。

Egor answered 2020-01-18T23:40:26Z

3 votes

只为您提供信息,对我来说,它可以复制文件

Microsoft.VC90.CRT。清单msvcr90.dll

进入用户计算机上的.exe目录(没有安装python或VC可再发行版本)。

感谢您的所有提示!

george answered 2020-01-18T23:40:59Z

1 votes

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

answered 2020-01-18T23:41:19Z

1 votes

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

对我有用

bazzinga answered 2020-01-18T23:41:43Z

-1 votes

在wxPython Wiki上有一些信息。

部署Python应用

带有wxPython和Python 2.6的py2exe

Werner answered 2020-01-18T23:42:12Z

-1 votes

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

c:/程序文件/ Microsoft Visual Studio 9.0 / VC / redist / x86 / 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')

petitchamp answered 2020-01-18T23:42:53Z

-2 votes

import sys

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

umläute answered 2020-01-18T23:43:09Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值