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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
详解Python当中的字符串和编码
Apr 25 Python
编写Python脚本来获取Google搜索结果的示例
May 04 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
python让列表倒序输出的实例
Jun 25 Python
python实现小球弹跳效果
May 10 Python
浅谈pycharm使用及设置方法
Sep 09 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
python列表返回重复数据的下标
Feb 10 Python
Django修改app名称和数据表迁移方案实现
Sep 17 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
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
python实现xlsx文件分析详解
2018/01/02 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
详解python 爬取12306验证码
2019/05/10 Python
Python各种扩展名区别点整理
2020/02/27 Python
python实现KNN近邻算法
2020/12/30 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
英国电气世界:Electrical World
2019/09/08 全球购物
Oracle性能调优原则
2012/05/03 面试题
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
本科毕业生自我鉴定
2013/11/02 职场文书
护士节策划方案
2014/05/19 职场文书
正科级干部考察材料
2014/05/29 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
呐喊读书笔记
2015/06/30 职场文书
保护地球的宣传语
2015/07/13 职场文书
生产车间管理制度
2015/08/04 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
七年级作文之下雨天
2019/12/23 职场文书