【问题标题】:Python GTK+ 3 Application Installer and Executable on WindowsPython GTK+ 3 应用程序安装程序和 Windows 上的可执行文件
【发布时间】:2018-12-23 12:59:00
【问题描述】:

我最近使用 GTK 完成了一个应用程序,我使用 MSYS2 和 MINGW64 在 Windows 上安装了该应用程序。到目前为止,我只能从 MSYS2 命令行运行该应用程序;但是,我正处于需要部署应用程序的阶段(构建安装程序和可执行文件)。

到目前为止,这是我从 msys2 采取的路线:

  1. 来自 msys2 的 py2exe 和 mingw64 的 python3.6(使用 GCC 7.3.0 64 位)。我可以很好地构建安装文件,但是,当我从 msys2 python3 setup.py py2exe 运行时,我得到了可怕的 IndexError: tuple index out of range。经过一番研究,我了解到我得到了这个,因为 py2exe 还不支持 python > 3.4

    1. pinstaller:从 msys2 终端,我什至无法解压这个选项。我收到此错误代码distutils.errors.DistutilsPlatformError: VC 6.0 is not supported by this module

这是我在 Windows cmd 中从 msys2 中取出的一条路线:

  1. cx_Freeze:Pip 无法从 msys2 终端获取此文件,因此我将项目移动到 windows 中的文件夹并调整 setup.py 以找到所有 dll 和其他必要文件。在实际运行和生成安装程序 exe 和应用程序 exe 方面,我在这个选项上取得了最大的成功。但是,在运行生成的 msi 文件然后运行新的可执行文件后,我收到如下错误:from _gi: cannot load the specified dll。在做了一些 hacky 故障排除之后(提供其他 dll 并阅读我提供的 _gi.pyd)。这是我(相信)我学到的。 _gi.pyd 指定要包含在 import 语句 import gi 催化 (import _gi; from . import _.gi; etc.) 中的 python dll 和 Visual c 运行时 dll。这些指定了我项目的 msys2 环境使用的 dll,所以我将它们添加到我的 setup.py 中。执行此操作后,我收到一条错误消息,指出我的应用需要 python3.dll,该 python3.dll 与另一个 python dll(我试图提供的那个)冲突。

这是我认为我知道的,请有人告诉我我错了,这样我就不必使用 pyQt5 重建我的应用程序(实际上在没有 msys2 和 mingw64 的情况下也可以工作):

我需要想办法只提供 mingw64 使用的 python 和 c dll(即不是命令 python setup.py bdist_msi 似乎自动包含并从我的安装程序中解压缩的 python3.dll)并将它们与我的应用程序捆绑在一起.

或者我需要想办法将不同的 python 3 (python 3.4) 安装到我的 mingw64 路径中,以便使用 py2exe(确实安装在那个环境中)。不过,即便如此,我也必须弄清楚如何为这个路径提供一个适当的 msvc dll,以便应用程序仍然可以工作。

或者或者我需要重建我的应用程序。

是否有人成功地开发了具有这些规范(msys2、mingw64、GTK+ 3 和 mingw64 的 python3.6.5 和 GCC 7.3.0 64 位)的 Windows 安装程序和可执行文件?有没有办法让上述任何一种方法在 msys2 终端中完成这项工作?有没有办法让这些在 windows cmd 中工作(我实际上可以让 cx_Freeze 和 py2exe 工作)?有没有我遗漏的选项?

为长篇道歉。

【问题讨论】:

  • 你在 MSYS2/Python 的边缘。我们的 Python 解释器是高度定制的(但在一般情况下运行良好)。我们围绕文件命名和布局做出了一些决定,以使 mingw-w64 Python 使用更像 unix 的布局,这会给假定“正常”Windows 布局的工具带来麻烦。这就是您可能在这里遇到的情况。但是,我不会等待有人调查和解决这个问题。 MSYS2 是开源的,并且严重依赖于自己的痒痒,所以如果你有 Python 技能,请考虑深入研究它。
  • 但不要尝试将 MSVC Python DLL 与 MSYS2/mingw-w64 中的任何内容混合。它不会起作用(可以进行一些 DLL 混合,但是对于互操作有非常严格的规则,更不用说我们对布局所做的更改了)。
  • 雷,感谢您的评论和建议。我找到了一个修复程序,让我可以挽救我在 MSYS2/Python3 中构建的内容。我找到了 GTK3 运行时环境的安装程序:github.com/tschoonj/… 我必须在我的 Windows 环境中回到 Python 3.4 才能使其工作。我还必须获得旧版本的 MSVC 才能使用 Python 3.4 进行编译。我不得不对代码进行一些更改;但是,我最终能够使用 Py2EXE 和 InnoSetup 将所有内容编译为 exe 和安装程序。像梦一样工作!

标签: python windows installation gtk3 mingw-w64


【解决方案1】:

Distribute GTK3 Applications made in Python with reduced MSYS2

这是一个替代解决方案,用于分发用 Python 编写的带有更新的 MSYS2 包的 GTK+3 应用程序,但不会创建可执行文件,抱歉。

它只复制你的 python 脚本所需的文件(只要它们在 MSYS2 文件夹中,包括 gtk 和 python 模块)到dist 文件夹,你可以复制到另一台 Windows 机器。我已经进行了测试,我的案例的输出大小约为 51 MB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2012-01-26
    相关资源
    最近更新 更多