2

我创建了一个小应用程序,用于在服务器出现问题时发送电子邮件。使用 py2exe 创建 exe 文件。虽然它在 Win7 上运行得非常好,但在 WinSRV2003 上运行它时遇到问题。我不相信它与代码本身有关。请参阅下面的导入

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

4 回答 4

1

我在涉及 COM 对象时遇到了类似的问题。也许这里也是如此。这个描述解决了我的问题。然后,我的软件将在不同的 Windows 版本上运行,而以前不会。

于 2010-01-15T09:11:00.600 回答
1

我会说这是缺少 DLL 的问题。您应该检查并查看 DLL 的您的应用程序包(或假定存在于目标计算机上)。我认为您可以depends.exe使用 Visual Studio 附带的功能来做到这一点。

编辑:我只记得。确保您使用 Python 2.5 安装运行 py2exe。2.6 有一些错误,这使得 exe 无法在几台机器上运行。

于 2009-11-10T11:38:32.380 回答
1

搜索 _scproxy似乎表明 _scproxy 是 2.6 中的一个新模块。也许以某种方式涉及 Python 2.5?py2exe 应该是一个完全独立的可执行文件,所以我不明白这是怎么可能的。

另一种可能性是 _scproxy 依赖于 Windows 2003 中不可用的 dll?您是否尝试过在 Win2003 上运行不带 py2exe 的程序?

于 2009-11-10T11:38:55.923 回答
1

谷歌搜索您的“此应用程序无法启动...”消息强烈表明这是一个 DLL 问题,可能与 msvcp80.dll 和朋友有关。考虑到 MS 如何不断更改 MSVCC 库等,这在最近的 Windows/Python/py2exe 中很常见。不同的 Python 版本与不同的库链接,如果它们没有预先安装在您的目标机器上,您可能会遇到这样的问题。有时从 MS 安装适当的可再发行包是可行的。

请注意,py2exe 警告,在本例中是关于 _scproxy,几乎总是可以忽略。得到这样的缺失模块的虚假报告是很常见的。95% 的时间我们可以忽略它们,即使我们确实看到几十个模块“丢失”。

于 2009-12-03T21:34:29.863 回答