【问题标题】:py2exe: Compiled Python Windows Application won't run because of DLLpy2exe:编译的 Python Windows 应用程序由于 DLL 而无法运行
【发布时间】:2009-07-17 21:01:13
【问题描述】:

我承认我对 Python 很陌生,我还不知道自己在做什么。最近我使用 Python 2.6.2 和 wxPython 2.8 创建了一个非常小的 Windows 应用程序。而且效果很好;我对它正常工作的情况感到非常满意。通常我的意思是当我直接通过 Python 解释器调用它时,像这样:

> python myapp.py

但是,我想更进一步,将其实际编译成一个独立的可执行文件。所以我从使用 py2exe 的 wxPython wiki 中关注了these instructions。起初它在命令行中给了我错误,说 MSVCR90.dll 丢失。然后我将 MSVCR90.dll 复制到我的 Python\DLLs 文件夹中。起初看起来像是修复了它,因为它成功地完成了它需要做的事情。它确实以一个快速警告结束,程序依赖于一些 DLL 文件,我可能需要也可能不需要分发它们。

所以我导航到 py2exe 创建的 dist 文件夹并尝试运行我的可执行文件。但试图打开它只会弹出一个错误对话框,上面写着:

This application failed to start because MSVCR90.dll was not found.
Re-installing the application may fix this problem.

所以我继续将 MSVCR90.dll 再次复制到这个 dist 文件夹中。但这并没有奏效。然后我将它复制到 WINDOWS\system32 目录中。那也没有做到。我需要做什么才能让这件事发挥作用?

【问题讨论】:

  • 这是另一个有更完整讨论的问题的重复:
    stackoverflow.com/questions/323424> 有一天,StackOverflow 可能会足够信任我,足以将其标记为重复。

标签: python wxpython py2exe


【解决方案1】:

您不能只复制 msvcr*.dll - 它们需要使用并行程序集的规则进行设置。正如 Sam 指出的那样,您可以通过安装可再发行包来做到这一点,或者只要您遵守规则,您就可以将它们与可执行文件放在一起。

有关详细信息,请参阅此处的“将 Visual C++ 库 DLL 部署为私有程序集”部分:How to Deploy using XCopy,但基本上您的应用程序如下所示:

c:\My App\MyApp.exe
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest
c:\My App\Microsoft.VC90.CRT\msvcr90.dll

这样做的一个好处是非管理员用户可以使用您的应用程序(我相信您需要成为管理员才能通过可再发行安装程序安装运行时)。并且不需要任何安装程序 - 您只需将文件复制到 PC 上即可。

【讨论】:

  • 这是 Vista 的功能吗?我遇到了类似的问题(MSVCP71.DLL 在启动 py2exe 应用程序时报告丢失)并将其放在与修复它的 .exe 相同的目录中(至少在 XP 上)
  • @Luper:我相信新规则与 msvcr80 一起出现。
【解决方案2】:

我相信安装Microsoft C++ Redistributable Package会正确安装你需要的DLL。

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2022-08-12
    相关资源
    最近更新 更多