使用auto-py-to-exe打包CustomTkinter程序为exe时报distutils模块缺失错误
问题描述
使用auto-py-to-exe工具将Python项目打包为.exe可执行文件后,启动程序触发运行错误,完整报错追踪信息如下:
Traceback (most recent call last): File "Jumper.py", line 5, in <module> File "C:\Users\Clowny\output\Jumper\customtkinter\__init__.py", line 10, in <module> from .appearance_mode_tracker import AppearanceModeTracker File "C:\Users\Clowny\output\Jumper\customtkinter\appearance_mode_tracker.py", line 3, in <module> from distutils.version import StrictVersion as Version ModuleNotFoundError: No module named 'distutils'
按官方文档给出的操作步骤配置尝试后,问题仍未解决。
报错根因
- Python 3.12及以上版本已将
distutils从标准库中移除,当前使用的旧版本customtkinter库仍在调用distutils.version下的StrictVersion类 - auto-py-to-exe是PyInstaller的GUI封装,对于隐式导入的第三方依赖,如果没有主动声明,打包时不会被收录到exe运行环境中,就会触发模块找不到的错误
排查解决方案
按优先级从高到低尝试:
- 优先升级customtkinter到最新正式版:新版本customtkinter已经完全移除了对
distutils的依赖,不会再触发这个报错。执行命令pip install --upgrade customtkinter完成升级后,删除之前打包生成的build、output缓存文件夹,重新走打包流程即可。 - 若项目有版本兼容要求无法升级customtkinter:先安装setuptools包(
distutils移除后官方将其对应能力合并到了setuptools中),执行命令pip install setuptools;之后打开auto-py-to-exe的高级选项配置栏,找到隐藏导入项,依次添加distutils、distutils.version两个导入声明,清除旧打包缓存后重新打包即可。 - 若上述方案均无效:将本地Python版本降级到3.11及更早的稳定版本(这类版本标准库仍自带
distutils),在对应版本的Python环境中重新安装项目所有依赖后,清除旧缓存再打包。
注意:每次重新打包前必须删除之前生成的build、dist、output目录,避免旧的缺模块缓存文件被复用,导致修复操作不生效。
内容的提问来源于stack exchange,提问作者Alessandro Bottini
相关产品推荐
相关产品推荐

