【发布时间】:2016-02-22 19:31:15
【问题描述】:
一个基本的 DLL 缺失问题...
我正在尝试使用 Py2Exe 打包使用 wxPython 的 Python 程序。由于缺少 DLL,Py2Exe 一直失败,但我不知道在哪里可以找到它们。我试过搜索我的整个 C: 驱动器,但在任何地方都找不到它们,这告诉我它们不见了,而不仅仅是未注册。谷歌搜索也没有帮助我找到它们,除了通过狡猾的“安装魔法缺失的 DLL(我们承诺没有垃圾软件;)”网站。
我希望有人能发现这些 DLL 之间的联系并告诉我它们来自哪里。这里有一些——每次我告诉 Py2Exe 排除一个 DLL 时,它都会说我错过了一个不同的 DLL,而且这个列表似乎永无止境:
- api-ms-win-core-libraryloader-l1-2-1.dll
- api-ms-win-core-atoms-l1-1-0.dll
- api-ms-win-core-winrt-error-l1-1-1.dll
- api-ms-win-core-sidebyside-l1-1-0.dll
- api-ms-win-core-localization-obsolete-l1-3-0.dll
- api-ms-win-core-heap-l1-2-0.dll
- api-ms-win-core-heap-l2-1-0.dll
- api-ms-win-core-delayload-l1-1-1.dll
- api-ms-win-core-libraryloader-l1-2-0.dll
- api-ms-win-core-rtlsupport-l1-2-0.dll
- api-ms-win-core-shlwapi-obsolete-l1-2-0.dll
- api-ms-win-security-base-l1-2-0.dll
我正在运行 Win 10(从 Win 8.1 升级),并且我安装了 Microsoft Visual C++ Redistributables 2008、2010 和 2012 的 x86 和 x64 版本。
我确实在论坛上听到过提到 Direct X 问题 - Direct X 应该安装了其中的一些,但那是与游戏有关的,我不明白为什么我需要 Direct X 来实现我的目的。我的 wxPython GUI 非常基础。
更新:运行 'sfc /scannow' 没有发现任何问题。
更新:我还安装了 x86 和 x64 版本的 Microsoft Visual C++ Redistributables 2015 和 Visual Studio 10 Express。
更新:我安装了 DirectX 11 以防万一。此外,在 %windir%\SysWOW64\downlevel 中似乎有一堆 DLL 未找到。我将下级目录添加到我的路径中,它解决了一些丢失的 DLL。我正忙着查看清单,看看还缺少什么。
更新:终于设法通过排除上面列出的 DLL 来让 Py2Exe 输出一个可分发文件。 This 文章建议其中一些至少应该是 Win 7 中架构更改的一部分——我不应该拥有它们(或它们的 Win 10 等价物)吗?它们来自哪里,将它们排除在 Py2Exe 操作之外会有什么影响?
更新:Hans Passant 建议这是 py2exe 中的一个错误。但是,生成的 .exe 在我的机器上运行良好,但在其他人的机器上却不能 - 错误消息显示找不到 DLL api-ms-win-core-libraryloader-l1-2-1.dll。我在我的 setup.py 脚本中排除了它,所以我知道它没有与我的 .exe 打包在一起。但是为什么我仍然可以在我的机器上运行 .exe?我在整个 c: 驱动器中搜索了排除的 DLL,但找不到它们。我认为这不仅仅是一个 py2exe 错误。
【问题讨论】:
-
原来排除 py2exe 构建中的 DLL 可以让 py2exe 完成它的工作,但是当我尝试运行创建的 exe 时,exe 会查找这些 DLL 并且不会运行。除了 exe 确实可以在我的机器上工作,而另一个使用 Python 和 wxPython 但不能在没有 Python 和 wxPython 的其他机器上工作。我已经在整个硬盘驱动器中搜索了这些 DLL - 我没有。