第一步 下载pyinstaller
在pycharm的setting中添加pyinstaller:
第二步 打包python文件
执行指令:pyinstaller -F xxx.py(-F的话只在dist文件夹中生成一个exe文件,-D的话会在dist文件夹中生成一个xxx的文件夹,此处只需要一个exe)
解决各种踩坑问题
遇到的第一种报错是:打包成功后,运行.exe报错: ModuleNotFoundError: No module named ’numpy.core.__dtype_ctypes’
解决办法:在生成的之前打包生成的spec文件中hiddenimports处添加缺失的module:
之后出现各种module找不到的错误都在此处添加module的名称,然后执行pyinstaller xxx.spec,重新生成新的exe
遇到的第二种报错:FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\alice\AppData\Local\Temp\_MEI90682\smart_open\VERSION’
遇到这个问题首先要找到pyinstaller安装目录下的hooks文件夹,我的安装目录是:C:\Users\alice\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyInstaller\hooks,里面有各种第三方配置文件的hook-xxx.py文件:
解决问题就是自己写个hook,然后放进pyinstaller的hooks里面即可:
新建python文件,将文件命名为hook-xxx.py(其中xxx为刚刚报错中找不到的目录,例如我的是smart_open),打开hook-smart_open.py,在其中添加代码:
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("smart_open")
完成添加工作,需要重新执行一遍pyinstaller -F xxx.py才能看到效果
遇到的第三种报错:找不到python文件依赖的txt数据集
解决方法是:将依赖的数据集放到exe所在文件的目录中,例如这样:
但注意源代码中的引用数据集处的路径要做出相应的修改,此处的话数据集的路径直接就是:
如果是其他相对路径的话会找不到数据集所在地方。执行exe文件,可以跑通。
运行exe结果如下: