前端不设限
Vue、React、Angular 或原生 HTML 都可以作为界面;PPX 不绑定任何 UI 框架。
文档版本
本站默认介绍 PPX 最新版。V5 归档入口始终保留,旧项目请使用对应的归档教程。
Web 前端适合制作现代界面,Python 适合数据分析、人工智能、自动化、文件处理和科学计算。PPX 把两者组合成桌面应用:
用户看到的桌面窗口
└─ Vue / React / Angular / HTML 页面
└─ ppx-js 调用稳定 RPC
└─ ppx-py 执行本地 Python 业务
└─ pywebview 提供系统窗口
└─ PyInstaller 生成可分发应用你不需要自己协调 Vite 和 Python 进程,不需要直接操作 window.pywebview.api,也不需要维护 PyInstaller spec、Inno Setup、DMG 或 Debian 打包脚本。
PPX 特别适合以下应用:
按下面顺序阅读,能最快完成第一个可运行应用:
最短使用流程只有五条命令:
python -m pip install ppx-py==6.0.0
ppx new hello-ppx --frontend vue
cd hello-ppx
ppx init
ppx dev框架包:ppx-py · PyPI · ppx-js · npm。桌面示例安装包见 GitHub Releases。
普通 PPX 项目的核心只有三个目录:
项目目录/
├── api/ # Python 业务代码和业务资源
├── gui/ # Web 页面
└── ppx/assets/ # Logo、图标和安装背景图另外有两个配置文件:
ppx.toml:应用开发者可以修改;ppx.lock:由 ppx update 维护,不要手工修改。PPX 内部的运行入口、桥接实现和打包脚本都在 ppx-py、ppx-js 中。普通项目不会复制这些源码,所以以后升级框架时不需要逐个比较和替换文件。
| 包 | 安装位置 | 主要职责 |
|---|---|---|
ppx-py | Python 虚拟环境 | CLI、配置、窗口、RPC 服务端、存储、更新器、PyInstaller 和三端安装器 |
ppx-js | gui/node_modules | Bridge 就绪、RPC 调用、超时、requestId、稳定错误和事件订阅 |
Vue、React、Element Plus、Vite 等属于应用前端,不属于这两个框架包。更换 UI 框架不会改变 Python API 的调用协议。
源码仓库附带可操作的工作台:体验 Python 问候、系统用户名、原生文件和目录选择、本地便签,以及可取消的应用更新。阅读示例工作台详解,逐步对照界面、JavaScript 状态与 Python 接口。
from ppx_py import api_method
@api_method("user.greet")
def greet(name: str):
return {"message": f"你好,{name}!"}import { ppx } from 'ppx-js'
const result = await ppx.call('user.greet', { name: '开发者' })
console.log(result.message)框架已经提供文件打开与保存、目录选择、窗口最小化/最大化/全屏/关闭、本地 JSON 存储和成品应用更新 RPC。业务页面只需调用 ppx.call()。
from ppx_py import app_data_path, resource_path
model = resource_path("models/model.dat")
database = app_data_path("database.sqlite3")同一段代码在开发环境和 PyInstaller 应用中都能找到正确位置,并会阻止绝对路径、.. 和符号链接越界。
ppx update --check
ppx update --dry-run
ppx update兼容更新只替换两个框架包和受管版本信息。不兼容时只输出冲突报告,不修改 Python 业务、前端页面、图片或用户数据。
PPX V5 与 V6 的入口、配置、通信、存储和打包结构不同,不能通过复制 V6 文件覆盖 V5 项目,也不能运行 ppx update 跨大版本迁移。
仍在维护旧项目时:
V5.3.4 标签。V5 原有的简介、快速上手、目录、配置、数据库、域间通信、应用更新、打包和 pywebview API 页面都保留原路径。每个 V5 页面顶部都会显示归档提示,并提供返回 V6 的入口。
如果你希望理解 PPX 内部如何工作,继续阅读:
源代码、问题反馈和变更记录: