使用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中无此键,同样会报错
解决步骤
- 确认Python版本:执行
python --version查看当前Python版本 - 安装兼容的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
- Python 3.10+:升级cx_Freeze至6.10及以上版本,执行命令:
- 重新打包:卸载旧版后安装对应版本,再运行
python setup.py build
额外提示:你的include_files中包含了venv目录,打包时无需加入虚拟环境,这会大幅增加打包后文件体积,建议移除("venv", "venv")这一行。
内容的提问来源于stack exchange,提问作者RJGATON007
相关产品推荐
相关产品推荐

