cx_Freeze打包Python3+Tkinter程序触发ModuleNotFoundError等问题求解
解决方案
1. 修复TypeError : expected str, bytes or os.PathLike object not Executable报错
该错误由第二个setup脚本中Executable类重复嵌套导致,直接删除外层多余的Executable即可:
将原有代码:
cible_1 = Executable( Executable('BouclePrincipale.py', base="Win32GUI",icon=icone) )
修改为:
cible_1 = Executable( 'BouclePrincipale.py', base="Win32GUI",icon=icone )
2. 修复所有ModuleNotFoundError报错
所有模块找不到的问题均由配置错误、拼写错误导致,按以下步骤修正:
- 修正自定义模块拼写错误:你本地存放SQL代码的文件夹名为
Communicationddb,但两个setup脚本中均错写为Communicationbdd,统一改为正确拼写。 - 补充模块/包配置:cx_Freeze的
includes参数仅接收模块名,不可填写文件路径;第三方完整包需要放到packages参数中才会被完整打包,修改配置部分代码如下:
# 把项目根目录加入模块搜索路径,确保cx_Freeze能找到你本地的Communicationddb文件夹 import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) includes = ['atexit', 'tkinter', 'sqlite3', 'PIL'] packages = ['reportlab', 'ttkwidgets', 'Communicationddb']
- 使用正确的解释器运行打包命令:打包前先激活项目对应的虚拟环境,再执行
python setup.py build命令,不要直接用PyCharm运行setup.py文件,避免解释器环境 mismatch 导致cx_Freeze找不到虚拟环境内安装的依赖包。
3. 关于是否需要更换IDE
不需要,上述问题均为cx_Freeze配置错误和拼写错误导致,和PyCharm运行机制无关。
内容的提问来源于stack exchange,提问作者Charles Marcucci
相关产品推荐
相关产品推荐

