使用cx_Freeze打包Python Tkinter GUI程序时遇AttributeError: 'list' object has no attribute 'main_script'错误求助
解决cx_Freeze打包时的AttributeError: 'list' object has no attribute 'main_script'错误
这个错误完全出在你的setup.py文件里,和主代码iwms.py没有关系。
错误原因
你在定义executables变量的时候,多写了一个尾部逗号,导致这个变量从原本的列表变成了一个包含列表的元组:
executables = [ cx_Freeze.Executable( "iwms.py", copyright="Copyright (C) 2021", base=base, icon="imws.ico", ), ], # 这里的逗号是问题根源!
当cx_Freeze尝试处理executables时,它会遍历这个元组,把里面的整个列表当成单个Executable对象来处理——而列表显然没有main_script这个属性,于是就抛出了你看到的错误。
修正方案
只需要把executables定义末尾的那个多余逗号删掉,让它保持为一个普通的列表即可。另外还要注意你代码里未定义的build_exe_options变量,打包时会触发新的错误,需要补充定义或者移除相关配置:
import cx_Freeze from cx_Freeze import * import sys base = None if sys.platform == "win32": base = "Win32GUI" # 修正:移除尾部逗号,保持为列表类型 executables = [ cx_Freeze.Executable( "iwms.py", copyright="Copyright (C) 2021", base=base, icon="imws.ico", ), ] # 补充定义build_exe_options(根据你的需求调整) build_exe_options = { "packages": ["tkinter"], "include_files": ["imws.ico"] } cx_Freeze.setup( name = "App", version = "0.1", description = "My application!", options = {"build_exe": build_exe_options}, executables = executables )
如果不需要额外的打包配置,也可以直接把options参数改成options = {},跳过build_exe_options的定义。
内容的提问来源于stack exchange,提问作者labyo
相关产品推荐
相关产品推荐

