Qt for Python & cx_Freeze#

cx_Freeze 允许您将 Python 应用程序冻结成可执行文件。支持的平台包括 Linux、macOS、Windows、FreeBSD 等。

您可以阅读 官方文档 来澄清任何进一步的问题,并记住在发现任何问题或想为他们的发展做出贡献时,通过 提交问题

准备#

使用 pip 安装 cx_Freeze

pip install cx_freeze

如果您正在使用虚拟环境,记得在将 cx_Freeze 安装到其中之前先激活它。

安装后,您将拥有可用于部署应用的 cxfreeze 二进制文件。

应用程序冻结#

cx_Freeze 工作有三个选项

  1. 使用 cxfreeze 脚本。

  2. 创建 setup.py 脚本来构建项目。

  3. 直接使用模块类(用于高级用途)。

以下部分涵盖前两个用例。

创建示例#

现在,考虑以下简单脚本,名为 hello.py

import sys
import random
from PySide6.QtWidgets import (QApplication, QLabel, QPushButton,
                               QVBoxLayout, QWidget)
from PySide6.QtCore import Slot, Qt

class MyWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
            "Hola Mundo", "Привет мир"]

        self.button = QPushButton("Click me!")
        self.text = QLabel("Hello World")
        self.text.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)
        self.setLayout(self.layout)

        # Connecting the signal
        self.button.clicked.connect(self.magic)

    @Slot()
    def magic(self):
        self.text.setText(random.choice(self.hello))

if __name__ == "__main__":
    app = QApplication(sys.argv)

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec())

使用 cxfreeze 可执行文件#

现在我们有一个应用程序,尝试使用以下命令将其冻结

cxfreeze hello.py

此命令创建一个包含可执行文件的 dist/ 目录,以及一个包含所有共享库的 lib/ 目录。

要启动应用程序,请转到 dist/ 目录并执行该文件

cd dist/
./main

使用 setuptools 脚本#

为此过程,您需要一个额外的名为 setup.py 的脚本

import sys
from cx_Freeze import setup, Executable

setup(name = "MyApp",
      version = "0.1",
      description = "My GUI App",
      executables = [Executable("hello.py")])

现在,使用它构建项目

python setup.py build

此步骤创建一个具有以下结构的 build/ 目录

build
└── exe.linux-x86_64-3.7
    └── lib
    └── main

build/ 目录中的第一个目录取决于您使用的平台,在本例中是使用 Python 3.7 的 x86_64 Linux。结构与之前描述的相同,您只需进入该目录并执行文件即可。

cd build/exe.linux-x86_64-3.7
./main