我正在将项目的早期版本移植到 Windows 并将其作为二进制文件分发。到目前为止,该项目是在 Arch Linux 中使用 Python 3.3 开发的,但我想将其打包为 Windows 中的独立二进制文件,以吸引更多的测试受众。我已经确认代码在带有 Python 3.3 的 Windows 中按预期运行。
在尝试用 cxfreeze 编译它时,我遇到了一些问题。首先,我使用的主库(sc2reader)包含 .csv 文件形式的数据。在 Windows 中,这些文件位于 \Python33\Lib\site-packages\sc2reader 中,但 cxfreeze 在包含与 sc2reader 关联的大多数 .py 文件时忽略了包含它们。最初,生成的可执行文件会立即崩溃,并抱怨这些丢失的数据文件。在手动添加它们之后(我无法让 setup.py 包含这些文件——cxfreeze 不会抱怨任何语法错误,但它也不会包含这些文件),我摆脱了这些错误。
我的 setup.py 看起来像这样:
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"include_files": ['C:\Python33\Lib\site-packages\sc2reader\data\']}
setup(
name = "vroMAD",
version = "0.1.0",
executables = [Executable("__main__.py", base = "base")]
手动复制文件后,我至少启动了二进制文件。它正确地绘制窗口,但某些行为不正确。文件浏览和文件选择等基本功能有效,仅此而已。窗口中有一个按钮,用于执行长任务并绘制进度条。因为这个漫长的任务会阻止 GUI 更新,所以每当用户按下此按钮时都会产生第二个进程。但是,程序不会继续执行任务并更新进度条,而是创建一个重复的窗口。事实上,任务管理器显示了一个额外的、相同的过程。新窗口的行为与旧窗口完全相同:它正确处理基本事件,但是当按下按钮时,它会生成另一个窗口......其行为方式相同。
多处理不适用于 cxfreeze 吗?