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
投稿

猜你喜欢

  • Python里的dict和set的背后小秘密

    2023-11-20 01:01:11
  • Python数据结构之栈详解

    2021-01-07 01:12:36
  • python字典dict中常用内置函数的使用

    2022-09-06 02:10:09
  • django admin管理工具自定义时间区间筛选器DateRangeFilter介绍

    2023-03-23 04:12:20
  • Python 输出时去掉列表元组外面的方括号与圆括号的方法

    2023-06-06 07:10:44
  • 简单谈谈python中的语句和语法

    2023-03-03 12:03:13
  • python将字符串转换成json的方法小结

    2023-11-17 23:58:57
  • 一起来学习一下python的数字类型

    2023-03-10 05:28:30
  • mysql数据库 主从复制的配置方法

    2024-01-16 09:24:35
  • python通过移动端访问查看电脑界面

    2021-06-02 05:19:58
  • 网页代码中键盘操作相关标签教程

    2010-03-18 15:56:00
  • Flask框架的学习指南之制作简单blog系统

    2022-09-28 03:27:26
  • 谈谈如何管理门户级网站的CSS/IMG/JS文件

    2009-09-03 11:48:00
  • Python中使用语句导入模块或包的机制研究

    2023-02-21 15:06:40
  • php filter协议使用方法

    2023-05-29 19:36:40
  • Python 12306抢火车票脚本

    2023-09-12 13:36:11
  • Web标准基础教程:CSS简写指南

    2010-04-02 12:47:00
  • 详谈Python中列表list,元祖tuple和numpy中的array区别

    2021-02-04 12:14:28
  • python直接调用和使用swig法方调用c++库

    2021-05-26 11:08:26
  • Python3中小括号()、中括号[]、花括号{}的区别详解

    2022-05-31 09:20:36
  • asp之家 网络编程 m.aspxhome.com