pywebview是一个轻量级跨平台包装器,允许在其自己的本机GUI窗口中显示HTML内容。它提供了桌面应用程序中Web技术的强大功能,隐藏了GUI基于浏览器的事实。这个玩意儿好啊,可以直接让我们做的网页demo打包成app,简直就是神器。但是当我用pyinstaller打包pywebview生成一个app文件时,却发现了一些问题。当gui="qt"或者gui="mshtml"或者gui不赋值使用默认值或者在主函数开头设置 PYWEBVIEW='cef'时,会发现在win10下打包后的程序可执行(这种情况,Echarts图表动态刷新的数据会莫名乱跳)。当gui="cef"时,在win10下打包后的程序不可执行(这种情况,python运行pywebview时,Echarts图表刷新的数据不会跳动)。在设置gui="cef"时,点击打包生成的exe文件,报错如下:

debug.log 文件会输出如下信息:[0812/112825.786:ERROR:icu_util.cc(133)] Invalid file descriptor to ICU data received.

于是,开始想着解决这个问题,先走一波常规流程,直接度娘、谷歌,一顿操作后发现还是没有找到解决办法。诸如网上一些 什么内存泄漏、版本过低等原因,试了都没有解决。于是直接去github下向作者提issue,终于有神秘网友成功帮我解决了这个问题。真的是很感谢,很感动,在此把解决办法记录下来,担心以后会忘了这个骚操作,同时也分享给遇到同样问题的朋友。

博主系统环境:

win10 64

python3.6

pywebview 3.0.1

cefpython3 66.0

PyInstaller 3.5

解决办法:

1.去cefpython3的github网址上https://github.com/cztomczak/cefpython把源码下载下来,在工程文件夹的 /examples/pyinstaller目录下拷贝 hook-cefpython3.py 文件

2.把刚复制的hook-cefpython3.py文件粘贴到 /site-packages/PyInstaller/hooks/下(这个要参考自己的PyInstaller安装路径)

大功告成,再次打包,发现生成的exe文件已经没毛病了!

知识点补充:

①CEF(Chromium嵌入式框架)——Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,也有其他语言的移植版。因为基于Chromium,所以CEF支持Webkit&Chrome中实现的HTML5的特性,并且在性能上面,也比较接近Chrome。

②CEF Python是由Czarek Tomczak于2012年创建的一个开源项目,旨在为Chromium Embedded Framework提供python绑定。嵌入CEF浏览器的示例可用于许多流行的GUI工具包,包括:wxPython,PyQt,PySide,Kivy,Panda3D,PyGTK,PyGObject,PyGame / PyOpenGL和PyWin32。

③pywebview加载的html、css、js可能不会支持一些比较新的语法,比如js的箭头函数、fill方法填充数组等,在使用时一定要注意。

④gui="cef"时,在windows平台下必须要保证python安装 cefpython3。gui等于其它值时,可以不用安装cefpython3。当然,gui不等于"cef"时,如果程序要用pyinstaller打包,那么hook-cefpython3.py 不能拷贝到  ...  /site-packages/PyInstaller/hooks/下,否则会无法运行执行打包命令

pywebview gui='cef' 生成app报错—— 中断点 已到达中断点的更多相关文章

  1. eact native生成APP报错:You have not accepted the license agreements of the following SDK components:

    一.报错信息 * What went wrong: A problem occurred configuring project ':app'. > You have not accepted ...

  2. 用itext生成PDF报错:Font 'STSong-Light1' with 'UniGB-UCS2-H' is not recognized.

    用itext生成PDF报错,加上try catch捕获到异常是 BaseFont bFont = BaseFont.createFont("STSong-Light1", &quo ...

  3. 报错:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

    SqlParameter[] sp = { new SqlParameter("@nGridID",SqlDbType.BigInt), new SqlParameter(&quo ...

  4. asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)

    原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 我想用post的方式把一个页面表单的值,传到另一个页面.当我点击Default.as ...

  5. 使用自编译的Emacs26.0.50build10版本,helm报错(已解决)

    使用自编译的Emacs26.0.50build10版本,helm报错(已解决) */--> code {color: #FF0000} pre.src {background-color: #0 ...

  6. Core在IIS的热发布问题或者报错文件已在另一个程序中打开

    关于Core发布到IIS的热发布问题,或者覆盖dll文件的时候会报错"文件已在另一个程序中打开",也就是无法覆盖程序的问题,经过百度和分析总结以下几种方案: 一.使用app_off ...

  7. pyinstaller 将.py生成.exe ----报错 “IndexError: tuple index out of range”

    pyinstaller将py打包为exe文件,用pysintaller居然报错 File "c:\anaconda3\lib\site-packages\PyInstaller\depend ...

  8. npm 打包 electron app 报错问题

    在进行desktop打包过程中,遇到如下报错: 0 info it worked if it ends with ok 1 verbose cli [ 'C:\\Program Files\\node ...

  9. Eclipse及Eclipse为基础的App报错“Failed to create the Java Virtual Machine”的解决办法

    由于OracleJDK马上就要收费了,公司要求更换OpenJDK,结果安装后Eclipse及Eclipse为基础的App启动报错:“Failed to create the Java Virtual ...

随机推荐

  1. php上传(二)

    上传的主体页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  2. ThinkPHP框架数组定义

    PHP数组定义 ThinkPHP框架中所有配置文件的定义格式均采用返回PHP数组的方式,格式为: //项目配置文件 return array( 'DEFAULT_MODULE' => 'Inde ...

  3. APIO 2017 商旅 洛谷3778

    Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所 深深吸引,决定定居于此,做一个商人.科巴有个集市,集市用从1到N的整数编号 ...

  4. NX二次开发-将工程图上的每个视图导出PNG图片

    大概思路是将每个视图导出PDF,在调另一个项目的EXE(PDF转PNG) //ExportDrawViewPng // Mandatory UF Includes #include <uf.h& ...

  5. vue-cli整合axios的几种方法

    Vue这个框架现在在单页面应用方面非常受人欢迎. 基于vue-cli创建的项目怎么样才能更好地处理网络请求? 首选的应该就是axios了 这次给刚接触vue的新手介绍一下axios在vue中如何使用 ...

  6. Git 远程仓库分支管理

    目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...

  7. Altium Designer 精心总结(转)

    https://blog.csdn.net/qq_29350001/article/details/52199356 设置铺铜间距规则,Electrical-Clearence_Poly设置如下,是铺 ...

  8. 解析css3 shake 抖动样式

    前端时间做项目发现一抖动按钮挺吸引眼球的,研究了下实现原理,在此和大家分享下: CSS Shake是一个使用CSS3实现的动画样式,使用SASS编写,利用它我们可以实现多种不同样式的抖动效果(如下面的 ...

  9. 今天学会了如何察看SSDT里面的东西、修改里面的地址

    简简单单,虽然不懂它的道理,就算会用了吧 哎,内核级的东西调着也费事 因为一个 extern 没写,我可怜的虚拟机,连续蓝屏了4次. typedef struct _ServiceDescriptor ...

  10. javascript面向对象编程笔记(函数)

    第三章 函数 3.1 什么是函数 一般来说,函数声明通常由以下几部分组成: function子句 函数名称 函数所需参数 函数体 return子句.如果某个函数没有显示的返回值,默认它的返回值为und ...