python 利用Pyinstaller打包Web项目


Posted in Python onOctober 23, 2020

最近需要用python打包一个单页面网页demo,于是准备用python包pyinstaller来打包程序。网上搜索了一下,大部分教程都是打包非web项目,这里分享一下打包简单网页demo的过程。

系统环境:win10+python3.6

一、安装pyinstaller

pip install pyinstaller

二、打包项目

1.如果是单文件项目,pyinstaller可以通过简单的命令进行python代码的打包工作,其命令为:

pyinstaller -option ***.py

1.1参数option可以有多个值:

-F : 指定打包后只生成一个exe格式的文件

-D : 生成一个文件目录包含可执行文件和相关动态链接库和资源文件等(默认选项)

-c : ?console, ?nowindowed 使用控制台,无界面(默认选项)

-w : ?windowed, ?noconsole 使用窗口,无控制台

1.2注意

①再增加一个命令参数 -w 可以保证点击生成的exe文件不会弹出黑色控制台窗口

    

 ②不加 -F 参数会生成一堆文件,但是运行速度快; 加-F参数生成一个exe文件,运行起来慢

2.如果不是单文件项目,而是有多级目录(包含一些依赖的静态资源),需要自定义打包

本文以打包自己的单页面网页demo为例,各级目录结构如下:

python 利用Pyinstaller打包Web项目

python 利用Pyinstaller打包Web项目

2.1为了进行自定义配置打包,需要先输出配置文件.spec文件,执行命令:

pyi-makespec -D -w main.py

注:

-w 参数是为了保证不会产生黑色控制台窗口

-D 参数生成一个文件目录包含可执行文件和相关动态链接库和资源文件等(默认选项,也可以不加)

生成的 main.spec 文件如下:

python 利用Pyinstaller打包Web项目

2.2为了是使打包生成后的exe文件可以加载css、js、图片等静态资源,这里需要添加依赖路径(注意:要保证自己 html 里面加载静态资源的路径是相对路径才行)。具体来说,此类资源文件的打包需要设置Analysis的datas,如下:

python 利用Pyinstaller打包Web项目

2.3执行打包命令:

pyinstaller main.spec

成功!

最终结果:

python 利用Pyinstaller打包Web项目

python 利用Pyinstaller打包Web项目

 3.一些报错

①执行打包命令时,报错:RecursionError: maximum recursion depth exceeded

原因:应该是python库递归遍历太深,超过了python预设的递归深度,导致出现 “RecursionError: maximum recursion depth exceeded" 的错误

解决办法:在spec文件里设置一个大点的递归深度,在该文件第二行,添加代码如下:

import sys
sys.setrecursionlimit(50000)

②python打包pywebview时,可能会报错:WebBrowserInterop.x64.dll not found

原因:这是由于系统没有找到WebBrowserInterop.x64.dll

解决办法:将WebBrowserInterop.x64.dll文件的所在路径添加到系统环境变量里即可!

WebBrowserInterop.x64.dll文件的所在路径:

python 利用Pyinstaller打包Web项目

添加到系统环境变量:

python 利用Pyinstaller打包Web项目

4.注意事项

①如果生成的exe文件双击无法正常运行,也没有报错提示,此时,如果想看具体报错信息,就不要直接双击执行,而是在控制台下执行。如果这样还是无法看到报错信息,则在打包软件时不要使用 -w 参数,这样在运行生成的exe时就可以弹出黑色控制台窗口,从而就可以在黑色控制台上面看到报错信息

②如果要减小打包体积,可以使用conda创建python虚拟环境,然后只安装需要的包,最后再进行打包,这样体积会大大减小

以上就是python 利用Pyinstaller打包Web项目的详细内容,更多关于python 打包项目的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现网络端口转发和重定向的方法
Sep 19 Python
Pyhton中单行和多行注释的使用方法及规范
Oct 11 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
python实现彩色图转换成灰度图
Jan 15 Python
python调用外部程序的实操步骤
Mar 04 Python
Python collections模块使用方法详解
Aug 28 Python
Python基于os.environ从windows获取环境变量
Jun 09 Python
Python 如何查找特定类型文件
Aug 17 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
python logging模块的使用详解
Oct 23 #Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 #Python
Python中免验证跳转到内容页的实例代码
Oct 23 #Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 #Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 #Python
详解python模块pychartdir安装及导入问题
Oct 22 #Python
Python实现自动装机功能案例分析
Oct 22 #Python
You might like
谈谈PHP语法(4)
2006/10/09 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
Python语言进阶知识点总结
2019/05/28 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
程序集与命名空间有什么不同
2014/07/25 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
私营公司诉讼代理委托书范本
2014/09/13 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android