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如何通过twisted实现数据库异步插入
Mar 20 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Python面向对象原理与基础语法详解
Jan 02 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
python中的django是做什么的
Jul 31 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python实现C4.5决策树算法
2018/08/29 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
什么是封装
2013/03/26 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
销售活动策划方案
2014/08/26 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
营运督导岗位职责
2015/04/10 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript