使用pywebview方法打包

在不使用 Electron 的情况下,怎么将前端项目(Vue/React)变成一个桌面端 exe 应用程序呢?使用 pywebview + pyinstaller 就可以实现。本文详细介绍如何从零开始创建一个基于 pywebview 的桌面应用,并最终将其打包成独立的可执行文件(exe)。整个过程包括环境搭建、前端集成、Python 交互实现以及打包部署。

安装

1
pip install pywebview pyinstaller

项目结构

1
2
3
4
5
6
7
8
my_app/
├── web_dist/ # 前端资源目录(Vue/React打包结果)
│ └── dist/
│ ├── index.html
│ ├── style.css
│ └── app.js
├── main.py # 主程序
└── topackage.py # 打包脚本

主程序开发 (main.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import webview
from webview import screens

class Api:
def __init__(self):
self.cancel_heavy_stuff_flag = False

if __name__ == '__main__':
screen = screens[0]
width = screen.width
height = screen.height
api = Api()

webview.settings = {
'OPEN_DEVTOOLS_IN_DEBUG': True,
}

window = webview.create_window(
'我的应用', './web_dist/dist/index.html', fullscreen=False, width=int(width), height=int(height))
webview.start(http_server=False, debug=True)

打包脚本 (topackage.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

import os
import shutil
import subprocess
from pathlib import Path


def package_app():
# 1. 检查必要文件是否存在
if not Path("main.py").exists():
raise FileNotFoundError("主程序 main.py 不存在")
if not Path("web_dist/dist/index.html").exists():
raise FileNotFoundError("前端资源 web_dist/dist/index.html 不存在")

# 2. 安装 PyInstaller(如果未安装)
try:
import PyInstaller
except ImportError:
print("正在安装 PyInstaller...")
subprocess.check_call(["pip", "install", "pyinstaller"])

# 3. 清理旧构建文件
build_dir = Path("build")
dist_dir = Path("dist")
spec_file = Path("main.spec")

for path in [build_dir, dist_dir, spec_file]:
if path.exists():
if path.is_dir():
shutil.rmtree(path)
else:
path.unlink()

# 4. 执行打包命令
cmd = [
"pyinstaller",
"--onefile",
"--windowed",
"--add-data", "web_dist/dist;web_dist/dist", # Windows 用分号分隔
"--name", "MyWebViewApp",
"main.py"
]

print("开始打包...")
subprocess.check_call(cmd)

# 5. 验证结果
exe_path = dist_dir / "MyWebViewApp.exe"
if exe_path.exists():
print(f"\n 打包成功!可执行文件位置: {exe_path.resolve()}")
print("注意:目标计算机需要安装 WebView2 Runtime")
else:
raise RuntimeError("打包失败,请检查错误信息")


if __name__ == "__main__":
package_app()


打包与运行

执行打包脚本

1
python topackage.py

双击MyWebViewApp.exe

通过 pywebview(轻量级、使用系统原生 WebView 组件、Python 和 JavaScript 无缝交互),可以轻松创建桌面应用。


相关链接(侵删)

  1. Python是怎么将Vue项目打包成桌面端应用程序的?看这篇就够了

=================我是分割线=================

欢迎到公众号来唠嗑: