Qt for Python & cx_Freeze#
cx_Freeze 允许您将 Python 应用程序冻结成可执行文件。支持的平台包括 Linux、macOS、Windows、FreeBSD 等。
您可以阅读 官方文档 来澄清任何进一步的问题,并记住在发现任何问题或想为他们的发展做出贡献时,通过 提交问题。
准备#
使用 pip 安装 cx_Freeze
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