问题描述:
命令行中输入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