python 应用转 exe 在 WinSRV2003 上不工作
我做了一个小应用,用来在服务器出现问题时发送邮件。我用py2exe把它打包成了exe文件。在Windows 7上运行得很好,但在Windows Server 2003上就有问题。我觉得这和代码本身没关系。
下面是我用到的导入模块:
import pyodbc, sys, smtplib, os
from datetime import date
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
import email.iterators
import email.generator
这是我的setup.py文件:
from distutils.core import setup
import py2exe
import modulefinder
modulefinder.AddPackagePath("mail.mime", "base")
modulefinder.AddPackagePath("mail.mime", "multipart")
modulefinder.AddPackagePath("mail.mime", "nonmultipart")
modulefinder.AddPackagePath("mail.mime", "audio")
modulefinder.AddPackagePath("mail.mime", "image")
modulefinder.AddPackagePath("mail.mime", "message")
modulefinder.AddPackagePath("mail.mime", "application")
setup(console=['capfile_tester.py'],
options = { "py2exe": { "includes": "decimal, datetime, email" } })
还有一条来自py2exe输出的信息,可能会有用:
以下模块似乎缺失:['_scproxy']
当我尝试启动应用时,出现的错误信息是:
这个应用程序启动失败,因为应用程序配置不正确。重新安装应用程序可能会解决这个问题。
我在想,是否缺少了一些注册表项,导致应用无法运行呢?
4 个回答
在网上搜索“这个应用程序无法启动...”的提示,基本上可以确定是DLL的问题,可能是和msvcp80.dll相关的文件。这个问题在最近的Windows、Python和py2exe中非常常见,因为微软一直在更改MSVCC库等内容。不同版本的Python会链接到不同的库,如果你的目标机器上没有预先安装这些库,就可能会出现这样的错误。有时候,安装微软提供的合适的可再分发包可以解决这个问题。
需要注意的是,py2exe发出的关于_scproxy的警告几乎总是可以忽略的。出现这种缺失模块的虚假报告是非常常见的。95%的情况下,我们可以忽略这些警告,即使我们看到有好几十个模块“缺失”。
在网上搜索一下 _scproxy,好像发现它是2.6版本中的一个新模块。也许和Python 2.5有点关系?不过,py2exe应该可以把程序打包成一个完全独立的可执行文件,所以我不太明白这怎么可能。
还有一种可能是,_scproxy依赖于一个在Windows 2003上不可用的dll文件?你有没有试过在Win2003上不使用py2exe运行你的程序?
我觉得这可能是缺少DLL文件的问题。你应该检查一下你的应用程序打包了哪些DLL文件(或者假设在目标电脑上存在的那些文件)。我想你可以用Visual Studio自带的depends.exe
来查看。
补充一下:我刚想起来,确保你是在Python 2.5的环境下运行py2exe。因为2.6版本有一些bug,这导致生成的exe在很多机器上无法正常工作。