Pyinstaller 打包遇到的一系列问题
1. ModuleNotFoundError:No module named typedefs之类的问题
在打包之后 当前目录下有个xx.spec文件。在里面将
hiddenimports=[]
修改为:
hiddenimports=['cython','sklearn','sklearn.ensemble','sklearn.neighbors.typedefs','sklearn.neighbors.quad_tree','sklearn.tree._utils','scipy._lib.messagestream']
在运行以下命令
pyinstaller xx.spec
2. This application failed to start because it could not find or load the Qt platform plugin “windows”
将pyqt中相关文件拷贝到你生成的xxx.exe目录下
具体文件夹为
C:\Python34\Lib\site-packages\PyQt5\plugins\platforms
如果没有的话,anaconda的请用这个
C:\Anaconda3\Library\plugins\platforms
(不一定是c盘啊,具体为自己的安装路径)
3. 使用opencv读取视频,但是打开失败
C:\Anaconda3\Lib\site-packages\cv2\opencv_ffmpeg341_64.dll这个动态链接库 复制到生成的exe的目录下
4. PYQT 动态数组 图表在打包之后,一直覆盖 无法更新
这是个神奇的问题,在集成环境下,一切ok。但是在pyinstaller打包之后,动态图数组一直覆盖,没法更新。
经过我和嘉豪一天的各种调试,(控制变量法)最后找到问题,就是背景图导致的。 最后我们的解决方案是用一个和背景一样大小的控件,在控件里加入图片作为背景。
————————————————
版权声明:本文为CSDN博主「Roc-Ng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/windows_peng/article/details/81285658
1个回复
-
xsmile
问题:exe文件运行无反应
- 首先查看自己打包时候用的参数,如果码中没有tkinter之类的GUI窗口的话就不要用 -w 了
同时查看一下码里面有没有标准化输入输出,例如print,如果有就不要用 -w
因为 -w 参数的意思是关掉控制台dos窗口,本来要显示的东西就只能显示在dos上,所以自然什都没有
解决方案
pyinstaller -F xxx.py
问题:提示failed to execute script xxx
- 这个问题我遇到的时候是用tkinter在写一个小程序,生成exe点开之后就出现了failed to execute script xxx的问题
解决方案
重新打包,在打包的时候加入了参数 -c
加入参数-c后重新打包再次运行exe-c的作用是返回错误信息!错误信息显示没有找到‘bg.jpg’!
这个文件是我用作tkinter窗口背景的一张资源。
这张图片是直接放在py文件的同一目录下的,直接打开py文件运行没有问题
而生成exe后运行却提示failed to execute scrip...
问题就出在这里!打包后的exe生成在dist文件夹中,exe不在与资源文件在同一目录,将‘bg.jpg’ copy到 与exe文件同一目录下以后问题解决。由此知道,pyinstaller打包并没有将调用到的资源文件打包在exe文件中,所以exe没有办法再用到该资源。解决办法是将资源和exe文件放到同一目录或者将源码中用到的资源路径改成绝对路径。问题:打包的时候出现了很多warning:lib not found...dll
- 原因是pyinstaller 没有办法识别到这些dll
解决方案
解决办法是中copy warning中一些dll文件的名字,再电脑中搜索到他们的路径!
我搜索到的路径:C:UsersASUSAppDataRoamingpyinstallerbincache00_py36_64bit该路径下面就是那一大堆warning的dll文件,这个路径添加到环境变量里面
方法如下
右键 此电脑——属性——高级——环境变量——用户变量中Path编辑新建然后填入刚刚dll所在的路径
然后问题就解决了以上是我用pyinstaller时遇到的一些问题和解决办法,有不正确的地方欢迎指正,有问题也欢迎大家提出交流~
1年前 我来评论 - 首先查看自己打包时候用的参数,如果码中没有tkinter之类的GUI窗口的话就不要用 -w 了