Python的Qt和cx_Freeze¶
cx_Freeze 让你能够将你的Python应用程序冻结成可执行文件。支持的平台包括Linux、macOS、Windows、FreeBSD等。
您可以阅读官方文档 来澄清任何进一步的问题,并记得通过提交问题 来为项目做出贡献,如果您发现任何问题,或者通过他们的开发来做出贡献。
准备¶
安装 cx_Freeze 可以使用 pip:
pip install cx_freeze
如果您正在使用虚拟环境,请记得在安装 cx_Freeze 之前激活它。
安装后,您将拥有cxfreeze二进制文件来部署您的应用程序。
冻结应用程序¶
有三种选项可以与cx_Freeze一起使用:
使用
cxfreeze脚本。创建
setup.py脚本来构建项目。直接使用模块类(用于高级用途)。
以下部分涵盖了前两个用例。
创建一个示例¶
现在,考虑以下名为 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