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的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
Php多进程实现代码
May 07 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
Python类装饰器实现方法详解
Dec 21 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Python接收手机短信的代码整理
Aug 02 Python
如何利用Python写个坦克大战
Nov 18 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 中使用随机数的三个步骤
2006/10/09 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
js实现弹窗猜数字游戏
2020/11/26 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
Python操作列表的常用方法分享
2014/02/13 Python
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
老生常谈python中的重载
2018/11/11 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
美国在线珠宝商店:SZUL
2017/02/11 全球购物
异常和异常类的概念
2014/09/12 面试题
新学期标语
2014/06/30 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android