如何解决cx_Freeze 5.1.1中导入setup的ImportError问题?
解决cx_Freeze打包时的ImportError: cannot import name 'setup'问题
哦,我一眼就看出问题所在了!你遇到的这个报错完全是文件名冲突搞的鬼😅
先看报错信息里的关键路径:C:\Users```\source\repos\PythonGame\cx_Freeze.py——你的打包脚本居然和cx_Freeze库的模块同名了!当Python执行from cx_Freeze import setup, Executable时,它会优先加载当前项目目录里的cx_Freeze.py(也就是你自己写的脚本),而不是你通过pip安装的官方cx_Freeze库。这样一来,既会触发循环导入,又因为你自己的脚本里根本没定义setup和Executable,自然就报错了。
具体修复步骤:
- 第一步:重命名打包脚本
把当前的cx_Freeze.py改成常规的打包脚本名,比如setup.py——这是cx_Freeze官方推荐的命名,完全不会和库名冲突。 - 第二步:清理残留编译文件
如果项目目录里有cx_Freeze.pyc文件(Python编译后的字节码文件),一定要删掉它,不然Python还是会优先加载这个旧文件。 - 第三步:修正脚本代码
把setup.py改回正确的导入和调用方式,而且注意:只需要打包游戏的主入口文件(Main.py),其他类文件会被cx_Freeze自动检测并打包,不需要单独写成Executable:from cx_Freeze import setup, Executable setup( name = "hello", options={"build_exe": {"packages":["pygame"], "included_files":["UFO.bmp","UFO_Monster.bmp","boss_Atack.jpg","boss.png","background_1.png","bullet.png","boom.png","shot.wav","explosion.wav","mybgm.wav","D2coding.ttf","Meteor.png"]}}, version = "0.1", executables = [ Executable('Main.py') # 删掉后面的Boss_class.py等Executable行,这些是被Main.py调用的模块,不需要单独打包成exe ] ) - 第四步:重新执行打包命令
打开命令行进入项目目录,运行:python setup.py build
这样操作后,cx_Freeze就能正确加载官方库中的setup和Executable,顺利完成打包了。
内容的提问来源于stack exchange,提问作者LeeJuhyuk
相关产品推荐
相关产品推荐

