问题描述:
命令行中输入pyinstaller之后,出现如下错误:
ModuleNotFoundError: No module named 'PyMySQL'
[15234] Failed to execute script 'main' due to unhandled exception!
解决办法:
-
原因分析:编译后再打包就只能找到main.py文件中导入的文件!
-
解决办法:办法一:使用绝对路径导入包,并在打包命令中添加–hidden-import:
import moduleName.a
隐式导入的库或模块,添加n文件名参数、p路径参数和本地py库、第三方库:
>>> pyinstaller -F -n newName -p E:\pythonTest --hidden-import moduleName.a --hidden-import moduleName.b --hidden-import PyMySQL main.py
办法二:显式导入所有依赖的包,也就是说依旧使用相对路径导入,但需要在某些地方告知pyinstaller要导入的包,就是把__init__.py分散到每个包的目录中去,每个__init__.py按需导入依赖的文件,但是注意:注意不能对__init__.py编译,否则打包后依旧会报错。
# __init__.py
import moduleName.a
import moduleName.b
import PyMySQL办法三:修改打包时的spec文件
很多时候,spec文件是告诉Pyinstaller怎么打包py文件,比如路径、资源、动态库、隐式调用的模块等等。一般来说,我们不需要对它进行修改,如果提示缺少某个文件,可以直接在打包生成的xxx.spec配置文件里将这个资源放进去。
pathex=['E:\\pythonTest'], datas=['a.txt'], hiddenimports=['z.py', 'PyMySQL'],
然后重新打包一下,成功后运行一下exe文件。
Pyinstaller main.spec
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2021-07-13 SQL Server 增加自增ID列