python 利用Pyinstaller打包Web项目

作者:蛋片鸡 时间:2021-11-25 12:22:36 

最近需要用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虚拟环境,然后只安装需要的包,最后再进行打包,这样体积会大大减小

来源:https://www.cnblogs.com/FHC1994/p/11250773.html

标签:python,打包,Pyinstaller,web
0
投稿

猜你喜欢

  • 一个修改Oracle数据库用户密码的小诀窍

    2009-09-30 15:29:00
  • python3.6的venv模块使用详解

    2023-05-11 12:13:41
  • 网站改版常见问题答疑

    2008-08-22 18:31:00
  • ASP+Access数据库安全设置方法小结

    2011-04-02 11:09:00
  • anaconda如何查看并管理python环境

    2023-11-10 13:31:38
  • MySQL 数据库语句优化的原则

    2010-01-20 10:11:00
  • Python爬取网易云音乐热门评论

    2022-06-16 00:24:58
  • 一篇文章带你了解谷歌这些大厂是怎么写 python 代码的

    2021-03-05 05:14:51
  • Python中的axis参数的具体使用

    2021-06-14 19:42:53
  • python深度学习tensorflow训练好的模型进行图像分类

    2023-02-20 20:40:37
  • 浅谈python中频繁的print到底能浪费多长时间

    2022-01-31 06:24:34
  • SQL游标原理和使用方法

    2008-12-22 10:50:00
  • 细化解析:MySQL 搜索中的大小写敏感性

    2008-11-27 15:53:00
  • python通过http下载文件的方法详解

    2021-11-11 04:26:23
  • 使用javascript提交form表单方法汇总

    2023-08-23 09:03:48
  • Python写一个简单的api接口的实现

    2023-07-23 20:20:53
  • Thinkphp3.2.3反序列化漏洞实例分析

    2023-06-14 11:27:37
  • Docker构建python Flask+ nginx+uwsgi容器

    2023-07-25 06:36:43
  • 从Python的源码来解析Python下的freeblock

    2023-07-26 20:44:39
  • Python中的自定义函数学习笔记

    2023-11-21 15:56:56
  • asp之家 网络编程 m.aspxhome.com