使用auto-py-to-exe打包PyQt5项目提示No module named自定义模块错误如何解决
问题原因
PyInstaller默认仅会自动识别并打包入口文件依赖的标准库、已安装到Python环境site-packages目录下的第三方库,你项目中同级目录下自行编写的自定义模块(entries.py、database_operation.py等)不会被自动扫描添加到打包结果中,因此运行exe时会触发模块找不到的报错。
解决方案
你可以通过两种方式配置打包规则,将自定义模块添加到打包结果中:
方式一:通过auto-py-to-exe图形界面配置(操作更直观)
- 找到「高级」分类下的
--paths配置项,添加你的项目root根目录的完整路径,告知PyInstaller可以到该路径下查找依赖模块 - 找到「其他文件」分类,将项目根目录下除main.py外的所有自定义py文件(entries.py、database_operation.py、extended_combobox.py、login.py、message_box.py)全部添加进去
- 重新生成打包命令后执行打包即可
方式二:直接修改打包命令
你可以在原有打包命令的基础上添加--paths和--add-data参数,Windows环境下修改后的命令示例如下,注意替换占位的路径为你本地的实际路径:
pyinstaller --noconfirm --onefile --console --paths "你的项目root根目录完整路径" --add-data "你的项目root根目录完整路径/entries.py;." --add-data "你的项目root根目录完整路径/database_operation.py;." --add-data "你的项目root根目录完整路径/extended_combobox.py;." --add-data "你的项目root根目录完整路径/login.py;." --add-data "你的项目root根目录完整路径/message_box.py;." "path/to/my/file/main.py"
额外建议
如果你的项目后续还会新增更多自定义模块,推荐将打包模式从--onefile改为--onedir,该模式会将所有依赖文件都放在同一个文件夹中,出现依赖缺失问题时排查更简单,程序启动速度也比单文件模式更快。
内容的提问来源于stack exchange,提问作者Nohra Seif
相关产品推荐
相关产品推荐

