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. springMVC快速入门 共分为五步

    springMVC快速入门 共分为5步分别为: 1 导入依赖 ​​ 2 spring-mvc.xml 配置 ​ 3 web.xml配置 ​ 4 自定义一个核心控制类 ​ 5 页面配置 详细步骤以及代码 ...

  2. 【原理】LVM(Logical Volume Manager)动态卷管理

    一张图让你学会LVM   导读 随着科技的进步,人们不知不觉的就进入了大数据的时代,数据的不断增加我们发现我们的磁盘越来越不够用了,接下来就是令人头疼的事情--加硬盘,数据的备份与还原.LVM就是Li ...

  3. 线段树区间离散化——牛客多校E

    这个区间离散化把我调死了.. 总之用vector来离散化,然后叶子节点维护的是一段区间,记录下每个叶子结点的起点+长度 千万要注意下标不能弄错! #include<bits/stdc++.h&g ...

  4. nginx启停脚本

    安装nginx时,源码包中未带官方的启动脚本,也就无法使用service nginxd start这种启动方式,查了下资料自己写了一个: #!/bin/bash #@version: #@author ...

  5. iOS报错锦集

    1.Your session has expired. Please log in. 提示“Your session has expired. Please log in.” 解决办法: Xcode ...

  6. [转] .htaccess实现www 与没有www之间的重定向

    建站过程中有时候我们需要做这些设置 1.访问www 直接重定向到没有www上或者反过来,那么怎么通过.htaccess文件来实现呢. 1.首先服务器要支持Rewrite重写 2.创建.htaccess ...

  7. Function Run Fun-递归+细节处理

    We all love recursion! Don't we? Consider a three-parameter recursive function w(a, b, c): if a < ...

  8. CodeForces 1166E The LCMs Must be Large

    题目链接:http://codeforces.com/problemset/problem/1166/E 说明 LCM(一个集合) 为这个集合中所有元素的最小公倍数. 如果$A \subseteq B ...

  9. java.sql.SQLException: validateConnection false

    -- :: --- [Create-] com.alibaba.druid.pool.DruidDataSource : create connection error java.sql.SQLExc ...

  10. JS函数 返回值的函数 return sum;或者result = add2(3,4);

    返回值的函数 思考:上一节函数中,通过"document.write"把结果输出来,如果想对函数的结果进行处理怎么办呢? 我们只要把"document.write(sum ...