You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cx_Freeze打包Tkinter应用为EXE时setup.py报KeyError求助

问题描述

执行python setup.py build命令将Tkinter开发的健身房应用打包为EXE文件时,触发KeyError: 'IMPORT_STAR'错误,相关代码及报错信息如下:

setup.py代码

import sys
from cx_Freeze import setup, Executable

build_exe_options = {
    "packages": ["customtkinter",
                 "tkinter",
                 "PIL",
                 "tkcalendar",
                 "os",
                 "sqlite3",
                 "random",
                 "string",
                 "datetime",
                 "qrcode",
                 "pyzbar",
                 "cv2",
                 "numpy",
                 "matplotlib",
                 "pandas",
                 "requests",
                 "calendar",
                 ],  # Add any additional packages your script depends on
    "include_files": [
        ("employee_qrcodes", "employee_qrcodes"),
        ("frame_2_icons", "frame_2_icons"),
        ("frame_3_icons", "frame_3_icons"),
        ("frame_4_icons", "frame_4_icons"),
        ("frame_5_icons", "frame_5_icons"),
        ("frame_6_icons", "frame_6_icons"),
        ("frame_7_icons", "frame_7_icons"),
        ("member_qrcodes", "member_qrcodes"),
        ("test_images", "test_images"),
        ("trainer_qrcodes", "trainer_qrcodes"),
        # Add more include_files as needed
        ("venv", "venv"),
        ("attendance_records.db", "attendance_records.db"),
        ("employee_attendance_records.db", "employee_attendance_records.db"),
        ("pat.png", "pat.png"),
        ("README.md", "README.md"),
        ("register_employee.db", "register_employee.db"),
        ("register_equipment.db", "register_equipment.db"),
        ("register_trainer.db", "register_trainer.db"),
        ("registered_users.db", "registered_users.db"),
        ("registration_form.db", "registration_form.db"),
        ("requirements.txt", "requirements.txt"),
        ("trainer_attendance_records.db", "trainer_attendance_records.db"),
        ("visitors_log.db", "visitors_log.db"),
    ],
}

base = None
if sys.platform == "win32":
    base = "Win32GUI"  # Use this option if you want to hide the console window

executables = [Executable("gym.py", base=base)]

setup(
    name="GymApplication",
    version="0.1",
    description="Your Gym Application Description",
    options={"build_exe": build_exe_options},
    executables=executables,
)

执行命令

(.venv) PS C:\Users\Admin\PycharmProjects\gyms\gyms> python setup.py build

报错栈

Traceback (most recent call last):
File "C:\Users\Admin\PycharmProjects\gyms\gyms\setup.py", line 2, in 
from cx_Freeze import setup, Executable
File "C:\Users\Admin\PycharmProjects\gyms.venv\Lib\site-packages\cx_Freeze\__init__.py", line 11, in 
from .command.build_exe import BuildEXE as build_exe
File "C:\Users\Admin\PycharmProjects\gyms.venv\Lib\site-packages\cx_Freeze\command\build_exe.py", line 14, in 
from cx_Freeze.freezer import Freezer
File "C:\Users\Admin\PycharmProjects\gyms.venv\Lib\site-packages\cx_Freeze\freezer.py", line 31, in 
from .finder import ModuleFinder
File "C:\Users\Admin\PycharmProjects\gyms.venv\Lib\site-packages\cx_Freeze\finder.py", line 33, in 
IMPORT_STAR = opcode.opmap["IMPORT_STAR"]
~~~~~~~~~~~~^^^^^^^^^^^^^^^
KeyError: 'IMPORT_STAR'
错误原因及解决办法

错误原因

该错误源于cx_Freeze版本与Python版本不兼容:

  • IMPORT_STAR是Python 3.10及以上版本新增的字节码指令
  • 若使用Python 3.10+但安装了过旧的cx_Freeze版本,旧版代码会尝试读取该指令但本身不支持,从而触发KeyError
  • 若使用Python 3.9及以下版本但安装了过高版本的cx_Freeze,新版cx_Freeze默认查找IMPORT_STAR,但低版本Python的opcode.opmap中无此键,同样会报错

解决步骤

  1. 确认Python版本:执行python --version查看当前Python版本
  2. 安装兼容的cx_Freeze版本:
    • Python 3.10+:升级cx_Freeze至6.10及以上版本,执行命令:pip install --upgrade cx_Freeze
    • Python 3.9及以下:安装cx_Freeze 6.9及以下版本,执行命令:pip install cx_Freeze==6.9
  3. 重新打包:卸载旧版后安装对应版本,再运行python setup.py build

额外提示:你的include_files中包含了venv目录,打包时无需加入虚拟环境,这会大幅增加打包后文件体积,建议移除("venv", "venv")这一行。


内容的提问来源于stack exchange,提问作者RJGATON007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:04:51