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 无缝交互),可以轻松创建桌面应用。本文详细介绍了从开发到打包的完整流程,提供了可直接使用的代码模板。无论是简单的工具类应用还是复杂的数据可视化项目,这个技术栈都能提供高效可靠的解决方案。

相关推荐
初遇你时动了情4 小时前
css中backdrop-filter 详细使用 ios毛玻璃效果、filter和backdrop-filter使用说明
前端·css
景彡先生5 小时前
Python Selenium详解:从入门到实战,Web自动化的“瑞士军刀”
前端·python·selenium
Liudef066 小时前
DeepseekV3.2 实现构建简易版Wiki系统:从零开始的HTML实现
前端·javascript·人工智能·html
珺毅同学7 小时前
YOLO输出COCO指标及YOLOv12报错
python·深度学习·yolo
景早8 小时前
vue 记事本案例详解
前端·javascript·vue.js
2401_841495649 小时前
Windows 系统中ffmpeg安装问题的彻底解决
windows·python·ffmpeg·bug·语音识别·下载·安装步骤
wangjialelele9 小时前
Qt中的常用组件:QWidget篇
开发语言·前端·c++·qt
乔冠宇9 小时前
vue需要学习的点
前端·vue.js·学习
用户47949283569159 小时前
同样是 #,锚点和路由有什么区别
前端·javascript
waysolong909 小时前
MCP服务构建、使用
python