使用 Pynsist 捆绑 PyQt4 应用程序

Bundling a PyQt4 application with pynsist

我正在尝试使用 Pynsist 为我的 python 应用程序创建一个安装程序,它使用 PyQt4。我想捆绑 python 安装,因此,我必须使用 python 3.5,因为 pynsist 仅支持 python 3.5 的捆绑。 我使用了全新的 WinPython 3.5.1.1 安装,其中我安装了所有必要的软件包并在新安装的 Windows 10 虚拟框中测试安装程序。为了构建安装程序,我在 Windows 7 机器上使用 WinPython 3.5.1.1 环境。

但是当我启动已安装的应用程序时,导入QtGui或QtCore时出现错误:

ImportError: DLL load failed: The specified module could not be found.

我在互联网上发现的这个错误的大部分问题是由于 python 无法找到 dll,但 QtGui4.dll 文件存在于 pkgs\PyQt4 文件夹中,并且也将它复制到应用程序的主文件夹或 python 文件夹不会改变任何东西。

我还尝试使用捆绑和 python 3.5.1 导出 pynsist 存储库中的示例 PyQt4 应用程序作为最小示例,但我遇到了同样的错误。

在 QtCore.pyd 上的 Windows 10 环境中使用 dependency walker: 缺少更多 "API-MS-WIN*.DLL" 依赖项,我只是滚动到最 "interesting".

的部分

缺少的 dll 文件是 msvcp140.dll

通过将此文件放入 .cfg 文件旁边的 pynsist_pkgs 目录,可以将此文件包含在安装中。

要在运行时加载它,必须将 pkgs 添加到路径中。这可以使用包含以下内容的 extra_preamble 文件来完成:

os.environ['PATH'] = pkgdir + os.pathsep + os.environ.get('PATH', '')