问题描述:

  命令行中输入pyinstaller之后,出现如下错误:

ModuleNotFoundError: No module named 'PyMySQL'
[15234] Failed to execute script 'main' due to unhandled exception!

 

解决办法:

  1. 原因分析:编译后再打包就只能找到main.py文件中导入的文件!

  2. 解决办法:办法一:使用绝对路径导入包,并在打包命令中添加–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

 

posted on 2022-07-13 09:30  HandsomeFa  阅读(3085)  评论(0编辑  收藏  举报