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

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

安装

powershell 复制代码
pip install pywebview pyinstaller

项目结构

text 复制代码
my_app/
├── web_dist/      # 前端资源目录(Vue/React打包结果)
│   └── dist/
│       ├── index.html
│       ├── style.css
│       └── app.js
├── main.py        # 主程序
└── topackage.py   # 打包脚本

主程序开发 (main.py)

python 复制代码
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)

python 复制代码
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()

打包与运行

执行打包脚本

powershell 复制代码
python topackage.py

双击MyWebViewApp.exe

下载体验

mp-779f4133-ea71-4a67-b4af-8cecfd13e8e1.cdn.bspapp.com/cloudstorag...

通过 pywebview(轻量级、使用系统原生 WebView 组件、Python 和 JavaScript 无缝交互),可以轻松创建桌面应用。本文详细介绍了从开发到打包的完整流程,提供了可直接使用的代码模板。无论是简单的工具类应用还是复杂的数据可视化项目,这个技术栈都能提供高效可靠的解决方案。

相关推荐
五号厂房几秒前
react hooks报错: Rendered fewer hooks/Rendered more hooks
前端
小高007几秒前
浏览器渲染帧管线全景拆解:从像素到屏幕的 16.67 ms 之旅
前端·面试
小王爱学人工智能1 分钟前
神经网络模型搭建及手写数字识别案例
pytorch·python·神经网络
中微子2 分钟前
ES6 异步编程深度解析:Generator 与 Async/Await 的演进之路
javascript
江城开朗的豌豆2 分钟前
useCallback:从性能焦虑到精准优化的轻松之路
前端·javascript·react.js
YC运维3 分钟前
Ansible模块
java·服务器·前端
江城开朗的豌豆5 分钟前
Redux 与 React-Redux:从“全局变量”到“响应式状态”的优雅之道
前端·javascript·react.js
excel8 分钟前
JavaScript 错误处理与调试全攻略:从 try/catch 到全局兜底
前端
Go 鹏ya8 分钟前
【Python学习笔记】whl包打包
笔记·python·学习
江城开朗的豌豆11 分钟前
点击弹窗外部自动关闭?一个useRef Hook就搞定!
前端·javascript·react.js