【问题标题】:Windows Server cannot execute a py2exe-generated appWindows Server 无法执行 py2exe 生成的应用程序
【发布时间】:2009-12-24 21:26:29
【问题描述】:

一个简单的python脚本需要在没有安装python的windows服务器上运行。

我使用了 py2exe,它生成了一个健康的 dist 子目录,以及在本地机器上运行良好的 script.exe。
但是,当我在服务器(Windows Server 2003 R2)上运行它时,它会产生:
系统无法执行指定的程序。

ERRORLEVEL 为 9020。

有什么想法吗?

【问题讨论】:

  • 您也可以在 ServerFault.com 上尝试这个问题。
  • 您是否尝试在 64 位操作系统上运行 32 位二进制文​​件(反之亦然)?

标签: python windows py2exe


【解决方案1】:

要使 py2exe 正常工作,您必须在应用程序中包含正确版本的 Microsoft C 运行时 DLL。

对于 Python2.6,这是 MSVCR90.dll 版本 9.0.21022.8,可以从 Microsoft Visual C++ 2008 Redistributable Package 获得:

http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en

请注意,此安装程序的 SP1 包含不同版本的 DLL,因此无法正常工作。

我在今年早些时候花了一段时间在 py2exe 教程中仔细解释了这一点,所以我将链接到该教程: http://www.py2exe.org/index.cgi/Tutorial#Step5

【讨论】:

    【解决方案2】:

    它可能缺少一些必需的 DLL。尝试使用depends.exe 来确定可能缺少的内容。它可能是一个 msvc-something-something.dll

    【讨论】:

    • 这是我最初的猜测,但不幸的是所有 dll 都已到位。
    【解决方案3】:

    我没有找到问题的原因,但是在同一脚本上使用 python 2.5 和 py2exe 在服务器上运行良好。

    我猜2.6下的py2exe有问题。

    【讨论】:

    • Py2exe 在 Python2.6 上运行良好,我用过很多次。您必须小心在分布式应用程序中包含哪个版本的 Microsoft Visual C 运行时 DLL。详情在py2exe教程的第5步中解释:py2exe.org/index.cgi/Tutorial#Step5
    【解决方案4】:

    由于 Python 2.6 是针对 Visual Studio 2008 构建的,因此目标计算机还必须具有 Visual Studio 2008 库,可从 Visual C++ 2008 Redistributable package 获得。

    我确认,在 Windows XP 或 Server 2003(两者都没有 Visual Studio 2008 可再发行组件)的干净构建中,Python 2.6 py2exe 可执行文件会因上述错误而失败,但在安装可再发行组件包后,可执行文件会运行正常。

    【讨论】:

    • 嘿。我很确定您链接到的 Visual C++ 2008 可再发行包 SP1 是错误的版本。 SP1 中的 C 运行时 DLL 版本错误,因此无法工作。请参阅下面的答案以获取正确的版本。
    • 有趣。我以为我已经使用 SP1 可再发行组件对其进行了测试,但显然我错了。谢谢指正。
    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多