pyinstaller打包工程项目,遇到自定义模块ModuleNotFound等问题

零、引用(这两个博客非常具有参考价值,感谢!):

1.python项目(非单一.py文件)用Pyinstaller打包发布成exe,在windos上运行程序。_隔壁敲代码的王先生的博客-CSDN博客

2. (2条消息) 使用pyinstaller打包多个py文件时,遇到的no module ...,exe文件一闪而过,自定义模块打包等问题_hgtjcxy的博客-CSDN博客_pyinstaller打包多个py文件

一、pyinstaller的安装

这块内容不多赘述,自行安装

二、pyinstaller打包工程

1.将我们的主要执行的.py文件(例如main.py是主要执行文件)与导入包(package)、模块(module)放置于平级目录。

pyinstaller打包工程项目,遇到自定义模块ModuleNotFound等问题_第1张图片

2.在我们的主要执行的.py文件头要加入如下语句,双重保证我们的包是能被找到的。pyinstaller打包工程项目,遇到自定义模块ModuleNotFound等问题_第2张图片

3.开启cmd,cd到main.py所在的目录,运行命令pyi-makespec main.py,然后会在这个目录生成一个main.spec文件。这个.spec文件很关键,包、模块、额外数据文件都通过这个.spec文件添加。

4.配置.spec文件,这一步最重要!

pyinstaller打包工程项目,遇到自定义模块ModuleNotFound等问题_第3张图片

 首先,看第一个Analysis配置,这里主要放的是我们工程里需要的.py文件,有我们的主要执行文件和导入文件(from ... import ...),这要是导入的文件,都需要放到这里一起打包。

其次,看第二个hiddenimports配置,这里主要放我们需要的包路径,不配置这个的话可能会有ModuleNotFound的ERROR,而且路径没配正确的话也会有同样的ERROR。所以,请确保包的名称和路径的正确性。ps还有啊,路径需要是英文得哦!

最后,看第三个exe里的console属性,默认为False,设置为True后可在命令行运行。有很多人可能会遇到双击exe出现cmd闪退的情况,不妨用cmd命令行的方式执行,还能清晰得显示错误。

5.运行命令pyinstall -D main.spec即可完成打包,然后再根据提示有没有少了哪些config,可以直接从源代码里copy进exe的执行目录。(有人可能会问为什么要用-D,这个可以去具体搜一下pyinstaller的参数用法)

三、避坑

1.所有打包后no module named '****'的报错和ModuleNotFound的ERROR问题,基本都是Analysis和hiddenimports没有配置好,一定要确保输入的名称正确以及路径正确且全英文输入。

 2.打包成功,但是没有报任何错误,但是运行exe文件时,总是会提示excute fail的错误,然后去看build的warn.txt文档会提示各种miss的model信息,不要去往这钻牛角尖,这时候,请从cmd命令行进入运行,并根据提示来解决具体是缺少依赖模块原因还是代码中读不到非代码资源(txt,png..),如果读不到非代码资源,就根据提示的not found 的路径,手动建立相关目录,放上需要用到的文档资源。

3.关于自定义包和模块的命名问题,最好实现看看python那些内置的包、模块名称,省的重复了就会让我们的自定义包和模块无法导入。比如我用了test命名,就吃了大亏。我把test包改成其他名称自然就可以了。

你可能感兴趣的:(python,pyinstaller)