如何为 pyqt 项目创建 Windows 安装程序

Posted

技术标签:

【中文标题】如何为 pyqt 项目创建 Windows 安装程序【英文标题】:How to create windows installer for pyqt project 【发布时间】:2012-05-18 21:14:05 【问题描述】:

如何将我的带有 Qt for GUI 的 python 程序转换为 .exe 文件??

我想为我的python源代码制作一个安装文件

【问题讨论】:

将其打包成独立的可执行文件和将其打包成安装程序是两件不同的事情。你要哪一个? 如果这个问题是关于为你的 pyqt 项目创建安装程序,那么它可能是类似的重复:***.com/questions/655011/… 【参考方案1】:

第一部分:“如何将我的带有 Qt for GUI 的 python 程序转换为 .exe 文件?”

您可以使用 PyInstaller,它支持 python 2.2 - 2.7,它有一个钩子系统,可以将 Qt 包含在所有 dll 和插件中。

你也可以使用:

bbfreeze cxfreeze py2exe(很旧) esky(除 PyInstaller 之外的所有上述内容的包装器)

基本上所有这些系统都有一个定义文件来处理和生成二进制包。例如,esky 有一个 setup.py(这是一个 distutil 文件)来生成包:

from esky import bdist_esky
from distutils.core import setup

setup(name="appname",
      version="1.2.3",
      scripts=["appname/script1.py","appname/gui/script2.pyw"],
      options="bdist_esky":"includes":["mylib"],
     )

比你可以调用“python setup.py bdist_esky”

对于 PyInstaller,情况完全不同。从控制台,在 PyInstaller 文件夹中 cd :

python Makespec.py  [options] script.py

这会生成一个规范文件,其中包含打包脚本的所有选项。您也可以使用编辑器修改此文件。

python Build.py  script.spec

这会分析并构建您的 exe(或等效的 os 二进制文件)。

第二部分:“我想为我的python源代码制作一个安装文件”

您必须使用 NSIS、InnoSetup、BitRock Installer、IzPack 或等效工具来生成平台安装程序。所以你必须把第一部分产生的二进制结果打包成操作系统分发。几乎所有的安装程序系统都被认为适用于 Windows 系统。 跨平台:零安装,IzPack ... 如果您使用 IzPack,您可以使用跨平台安装程序支付包含 jvm 的费用。

【讨论】:

请注意,此答案解决了 OP 是否想要制作可分发的独立可执行文件的问题。不是创建“安装程序”以将各种重要数据放置在系统位置的行为。 我知道 cx_Freeze 实际上可以通过 bdist_msi 命令一步构建一个简单的 MSI 安装程序。 这不是 cxfreeze 功能,而是 distutils 功能。您可以为您的 python 源代码构建一个 msi 安装程序。因此,您将拥有一个 egg 模块的安装程序,以便在 python 环境中分发您的代码。我认为这个问题不是这样的。【参考方案2】:

这里使用 Py2Exe 是最合适的选择。

PY2EXE 二进制文件:http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

用法:

    创建一个新的安装 python 文件: 从 distutils.core 导入设置

导入py2exe

setup(console=['你的 python 脚本绝对路径'])

    保存此文件。

    转到命令提示符并更改保存 setup.py 文件的目录。

    运行命令: [python 你的python脚本名_要转换成exe> py2exe]

我无法发布图片,因为我没有 10 个声誉来发布两个以上的链接。如果需要任何帮助,请发表评论。

【讨论】:

以上是关于如何为 pyqt 项目创建 Windows 安装程序的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Python 3.4 版本安装 PyQt5?

C# 如何为 Windows 服务创建安装项目以自动安装它?

如何为 PyQT4 项目使用外部样式表?

如何为PyQt5构建Qt WebEngine?

PyQt:如何为单个标题设置不同的标题大小?

如何为Java程序创建MSI Windows安装程序?