使用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(): 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 不存在")
try: import PyInstaller except ImportError: print("正在安装 PyInstaller...") subprocess.check_call(["pip", "install", "pyinstaller"])
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()
cmd = [ "pyinstaller", "--onefile", "--windowed", "--add-data", "web_dist/dist;web_dist/dist", "--name", "MyWebViewApp", "main.py" ]
print("开始打包...") subprocess.check_call(cmd)
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()
|
打包与运行
执行打包脚本
双击MyWebViewApp.exe
通过 pywebview(轻量级、使用系统原生 WebView 组件、Python 和 JavaScript 无缝交互),可以轻松创建桌面应用。
相关链接(侵删)
- Python是怎么将Vue项目打包成桌面端应用程序的?看这篇就够了
=================我是分割线=================
欢迎到公众号来唠嗑: