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

相关推荐
东方芷兰1 小时前
Agent 技术摘要 06 —— Harness、原生视觉、Jev、mmproj、dsh
人工智能·笔记·python·ai·langchain·ai编程
qq_2518364571 小时前
理发管理系统 —— 会员模块
开发语言·前端·python·flask
Dovis(誓平步青云)1 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
郝学胜-神的一滴1 小时前
AI 编程智能体 03:拆解当下主流智能体能力
开发语言·c++·人工智能·python·程序人生·游戏
言乐61 小时前
Python文字审核模型
开发语言·windows·python·django·pygame
Frag0ut1 小时前
2027 年浏览器展望:Chrome 与 Edge 的 AI 智能体进化方向
前端·人工智能·chrome·edge·浏览器·新功能
计算机魔术师2 小时前
从AI绘图鼻祖到音乐版权破局者,Stability AI如何被三大唱片巨头「收编」
前端
wuyk5552 小时前
Python网络爬虫入门到实战 第02章:HTTP/HTTPS协议超通俗精讲(GET/POST、请求头、响应码、爬虫核心基础)
爬虫·python·http
昔我往昔2 小时前
init文件介绍
python·flask
奕鼎竜瑆2 小时前
Chrome 插件开发实战指南:从入门到发布
前端·chrome