2、Pyinstaller打包出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position解决方案
3、pyinstaller打包报错: RecursionError: maximum recursion depth exceeded,UnicodeDecodeError 解决办法
4、pyinstaller打包exe文件及过程中 no module named 问题处理
第一步,安装pyinstaller。
pip install pyinstaller
(如果安装失败,用管理员权限安装)
第二步,在要打包的文件夹路径下打开cmd,输入命令进行打包:
pyinstaller -F -w demo.py
-F表示指定打包后只生成一个exe格式的文件,-w表示窗口,无控制台。
还可以更换exe的图标,以及tk窗口默认的小羽毛图标,这里不展开讲。
第三步,把运行程序需要的数据放进生成的dist文件夹下,再打开exe运行。
参考:
https://www.cnblogs.com/navysummer/p/10614905.html
https://blog.csdn.net/weifuliu/article/details/82826643
当打包的程序中导入了matlab.engine,根据方法一会报matlab没有mlarray模块的错误,需要用第二种方法进行打包。
第一步,新建一个hooks的空白文件夹,在hooks中新建hook-matlab.py
,
hook-matlab.py
中写入以下信息:
from PyInstaller.utils.hooks import collect_all
datas, binaries, hiddenimports = collect_all('matlab')
然后,把hooks文件夹放到路径"C:\Users\
用户名称
\Anaconda3\Lib\site-packages\predict\hooks"
下。(用户名称修改为自己电脑上的用户名称)
第二步,在需要打包的文件夹路径下打开终端,输入以下命令(用户名称修改为自己电脑上的用户名称):
pyinstaller lncLocPredTool5.py --additional-hooks-dir "C:\Users\
用户名称
\Anaconda3\Lib\site-packages\predict\hooks"
--hidden-import sklearn.neighbors.typedefs
第三步,把程序运行需要用的数据放到dist文件夹下,就能点开dist文件夹下的exe文件运行程序啦。
参考:
https://stackoverflow.com/questions/61482776/creating-exe-file-with-pyinstaller-and-matlab-engine
第一步,下载MinGW64 8.1(https://link.zhihu.com/?target=https%3A//sourceforge.net/projects/mingw-w64/files/),解压到C盘目录下,在文件夹路径下打开cmd,输入gcc.exe –version,检查是否有版本显示,有则说明有效。
然后,把安装路径“C:\mingw64\bin”添加进环境变量。
第二步,安装Nuitka。
pip install nuitka
或者安装最新版本(根据使用经验发现新版本修复问题多,兼容性更好)
pip install -U "https://github.com/Nuitka/Nuitka/archive/develop.zip"
第三步,编译文件
(1)常用命令
--mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw
--standalone 独立文件,这是必须的
--windows-disable-console 没有CMD控制窗口
--recurse-all 所有的资源文件 这个也选上
-recurse-not-to=numpy,jinja2 不编译的模块,防止速度会更慢
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--plugin-enable=pylint-warnings 报警信息
--plugin-enable=qt-plugins 需要加载的PyQt插件
--windows-icon=你的.ico 软件的图标
(2)如下是一条完整的命令 编译的py文件为index.py
nuitka --mingw64 --windows-disable-console --standalone --show-progress --show-memory --plugin-enable=qt-plugins --plugin-enable=pylint-warnings --recurse-all --recurse-not-to=numpy,jinja2 --output-dir=out index.py
参考:https://zhuanlan.zhihu.com/p/133303836
在打包时候,并没有提示错误,可以顺利打包成exe文件。但是在运行打包好的软件时,会提示找不到模块,本人遇到的是找不到第三方模块,例如 requests 。这时候需要在打包时指定 -p 参数,后面跟上python目录下的第三方库模板目录路径 site-packages。再打包就成功了
pyinstaller example.py -F -p C:/python/lib/site-packages
参考:
https://blog.csdn.net/itworld123/article/details/93051789
在你打包的命令行中先输入chcp 65001 ,然后再输入打包命令。
pyinstaller -F xxx.py
参考:https://blog.csdn.net/qq_38343111/article/details/91362920
出现原因:
这个错误意思是超过最大递归深度,python默认的递归深度默认是1000),因此当递归深度超过就会引发这样的异常。
解决方法:
(1)执行pyinstaller -F XXX.py 它会在你的目录文件生成XXX.spec文件,然后报错,出现该类异常。
(2)打开XXX.spec文件,在开头添加上面两行代码。
import sys
sys.setrecursionlimit(1000000)
(3)继续执行打包,但是还文件名:pyinstaller -F XXX.spec ,执行该文件。
参考:https://www.cnblogs.com/patrickstar2019/p/11465220.html
若打包后,运行exe报错:
ModuleNotFoundError:No module named ‘matplotlib.backends.backend_tkagg’
也就是没找到matplotlib.backends.backend_tkagg模块,解决方法是在打包命令后面加上如下:
demo.py是要打包的文件
pyinstaller -F demo.py --hidden-import matplotlib.backends.backend_tkagg
其它缺失模块也同理,把上述‘matplotlib.backends.backend_tkagg’替换成缺少的模块的名称即可。
参考:https://blog.csdn.net/huxiangen/article/details/79795768